【问题标题】:QT QcoreApplication postEvent() behaviourQT QcoreApplication postEvent() 行为
【发布时间】:2018-01-10 16:36:28
【问题描述】:

我已经编写了这个简单的 QT 主窗口,只有当我将 QString 参数传递给 QKeyEvent 时,它才会打印密钥,我希望即使没有 QString 参数也能打印密钥?

下面代码中的第 1 部分似乎不起作用(我没有在 QLineEdit 字段中打印密钥;而第 2 部分有效并且打印了“1”!这是正常行为吗?当事件发生时会发生什么情况?贴在代码的第一部分?

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)

{
    ui->setupUi(this);
    this->ui->lineEdit->setFocus();

    Qt::Key key = Qt::Key_1;
    // 1
    QKeyEvent *event = new QKeyEvent (QEvent::KeyPress, key ,Qt::NoModifier); 
    QCoreApplication::postEvent(QWidget::focusWidget(), event); // Does not work! No key is set in the widget
    //
    //2 
    QKeyEvent *event2 = new QKeyEvent(QEvent::KeyPress, key, Qt::NoModifier, QKeySequence(key).toString());
    QCoreApplication::postEvent(QWidget::focusWidget(), event2); // this one works! 

}

【问题讨论】:

标签: c++ qt qcoreapplication


【解决方案1】:

并非所有按键事件都有文本表示(删除、光标移动、快捷方式……)。对于那些拥有它的人,QKeyEvent 类将其存储在其文本中。您必须提供该文本,否则它是“无文本”事件。

QLineEdit 只会添加文本,而不是从事件类型中推断出来(可以看到here)

【讨论】:

  • 谢谢@king_nak,我很困惑,因为在一些SO线程中人们报告说它对他们有用!我对“它有效”的看法是生成了文本..但现在我有了完整的图片..postEvent 适用于这两种情况。
猜你喜欢
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多