Arm*_*yan 11 c++ qt event-handling keyboard-events
我正在玩一些图形,我用箭头键实现了简单的相机移动.我的第一种方法是覆盖keyPressEvent做这样的事情:
switch(key)
{
case up: MoveCameraForward(step); break;
case left: MoveCameraLeft(step); break;
...
}
Run Code Online (Sandbox Code Playgroud)
这不符合我的意愿.当我按住(例如)前进键时,相机向前移动"步进"单位,然后暂停一段时间然后继续移动.我猜这是事件的生成方式,以避免在有点长按键的情况下发生多个事件.
所以,我需要在Paint()日常工作中轮询键盘.我还没有找到如何用Qt做到这一点.我想到了一个map<Key, bool>将更新的内容keyPressEvent并在其中keyReleaseEvent轮询该地图Paint().有更好的想法吗?感谢您的任何见解.
Nat*_*han 10
这并不能解决检测按下哪些键的一般问题,但如果您只是寻找键盘修饰符(shift,ctrl,alt等),则可以通过静态QApplication::keyboardModifiers()和QApplication::queryKeyboardModifiers()方法检索.
所以,我需要在Paint()例程中轮询键盘.我还没有找到如何用Qt做到这一点.我想到了一个可以在keyPressEvent和keyReleaseEvent中更新的地图,并在Paint()中轮询该地图.
你的第二种方法就是我要做的,除了我会使用一个连续的,定期的QTimer事件来轮询键盘按下的地图,并在必要时调用QWidget :: Update()函数来改为使显示小部件无效.由于很多原因,强烈建议不要在Paint()中执行非绘制操作,但我不知道如何解释它.