我在嵌入式系统上有一个自定义输入设备,并且必须将输入转换为 Qt 中的适当事件。在我当前的视图中,我有一个 QListView 和一些 QPushButtons。我在我的小部件中使用以下代码。
QKeyEvent * e = NULL;
if (cmd.up.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Up, 0, 0);
else if (cmd.down.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Down, 0, 0);
else if (cmd.left.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, 0, 0);
else if (cmd.right.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Right, 0, 0);
else if (cmd.ok.value)
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_Space, 0, 0);
if (e)
QApplication::postEvent(this->focusWidget(), e);
我可以在列表和按钮之间向上/向下/向右/向左移动,但我无法单击按钮。我也尝试过使用 Qt::Key_Enter 和 Qt::Key_Return ,但两者都不起作用。
如果在我的电脑上运行应用程序,在我的键盘上按空格键或鼠标左键会单击一次按钮。这表明在某处,事件被更改为按钮比直接获取 Qt::Key_Space 更喜欢的东西,对吧?
任何人都知道如何很好地解决这个问题?我可以检查哪个(如果有)按钮有焦点并手动单击它,但这不是很优雅的编码......