我设计了一个应用程序,我将无法访问系统键盘(在 Debian 下编写)。用于通过 RS232 连接的按键面板显示器。按钮必须发出 Tab、Backtab、箭头和 Enter 键。在主对话框的类中,我发出信号对应的按钮,即。
if (key == KEY_TAB)
{
emit KeyPressTab ();
}
使用以下调用在各种对话框中捕获此信号:
QObject :: connect (mainwindow, SIGNAL (KeyPressTab ()), this, SLOT (OnKeyPressTab ()));
反过来,同样的功能槽是:
void SecondDialog :: OnKeyPressTab ()
{
QKeyEvent event (QEvent :: KeyPress, Qt :: Key_Tab, Qt :: NoModifier);
QApplication :: sendEvent (this, & event);
}
这样,制表和 BackTab 工作没有问题,但箭头和输入不起作用。我正在使用相同的机制,例如:
------------------------------- ----------------- Main Window ------------
if (key == KEY_LEFT)
emit KeyPressLeft ();
------------------------------- ----------------- Second Dialog-----------
QObject :: connect (mainwindow, SIGNAL (KeyPressLeft ()), this, SLOT (OnKeyPressLeft ()));
void SecondDialog:: OnKeyPressLeft ()
{
QKeyEvent event (QEvent::KeyPress, Qt::Key_left, Qt::NoModifier);
QApplication :: sendEvent (this, & event);
}
可惜没有反应。
为了澄清,我在下面发布了算法。