我已经编写了这个简单的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只会添加文本,而不是根据事件类型推断文本(如here所示)

10-07 13:27