QT QcoreApplication postEvent() behaviour

QT QcoreApplication postEvent() behaviour

本文关键字:behaviour postEvent QcoreApplication QT      更新时间:2023-10-16

我已经编写了这个简单的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! 
}

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

QLineEdit只会添加文本,而不是从事件类型推断它(如此处所示(