QT QcoreApplication postEvent()行为

时间:2018-01-10 16:36:29

标签: c++ qt qcoreapplication

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

}

1 个答案:

答案 0 :(得分:1)

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

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