我已经写了这个简单的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!
}发布于 2018-01-11 01:02:18
并非所有的按键事件都有文本表示(删除、光标移动、快捷键等)。对于那些拥有它的人来说,QKeyEvent类将它存储在它的文本中。你必须提供该文本,否则它是一个“无文本”事件。
QLineEdit只会添加文本,而不会从事件类型中推导出它(如here所示)
https://stackoverflow.com/questions/48192091
复制相似问题