如何在Qt GUI应用程序中等待按键

时间:2017-01-18 17:14:04

标签: qt

我正在为我的孙子写一个数学练习课程。我首先把它写成一个控制台应用程序,如下所示,一切正常。

for(int i = 0; i <= 9; i++)
{
    n2Digit = GetNewDigit(iProblemsWorkedArray);
    int validAnswer = add(n1Digit, n2Digit);
    bool noKey = true;
    while(noKey)
    {
        char KeyPressed = getch();
        int KeyAscii = KeyPressed;
        if((KeyAscii >= 48) && (KeyAscii <= 57) && (validAnswer < 10))
        {
            studentAnswer = KeyAscii - 48;
            noKey = false;
        }

      yada yada...

    }
}         

现在我想用Qt GUI编写相同的东西,但发现

   char KeyPressed = getch();
while循环中的

不再适用于GUI模式。

我已经搜索了几天,得出的结论是我必须对错误的搜索进行措辞。有人请帮忙吗?

1 个答案:

答案 0 :(得分:0)

我的猜测是,您正在创建一个带有字母或编号答案的问题列表,并且您希望用户(孙子)按一个键来回答它,而不是将答案输入编辑字段。

假设这是正确的,你可以做以下两件事之一:

  • 对显示问题的小部件进行子类化,然后重新实现keyPressEvent方法。 Qt为获取键盘焦点的小部件调用此方法。它传递一个QKeyEvent对象,其中包含按下的键。然后,您可以检查密钥以查看它是否正确,并提供反馈。有关详细信息,请参阅QWidget::keyPressEvent文档。

  • 如果没有子类化,您可以创建一个事件过滤器并将其安装在标准小部件上。事件过滤器接收发送到目标窗口小部件的事件,您可以拦截QKeyEvent个事件,检查它们是否有正确或错误的答案,并做出相应的响应。有关详细信息,请参阅QObject::installEventFilter文档。