我正在创建一个应用程序,其中“左箭头+向下箭头”按下具有不同的行为(它与第一个左箭头然后左箭头不同),目前在keyPressEvent事件中我将它们逐个地分成两个调用。
有什么方法可以在一个键盘事件中获得多个按键吗?
答案 0 :(得分:8)
我通过下面的代码解决了这个问题。
QSet<Qt::Key> keysPressed;
void Widget::keyPressEvent(QKeyEvent * event) {
m_bFirstRelease = true;
keysPressed+= event->key();
}
void Widget::keyReleaseEvent(QKeyEvent *) {
if(m_bFirstRelease) {
processMultiKeys(keysPressed);
}
m_bFirstRelease = false;
keysPressed-= event->key();
}
答案 1 :(得分:8)
谢谢你。我发布了Python(PyQt)等价的代码,以便其他人可能会觉得它很有用。
def keyPressEvent(self, event):
self.firstrelease = True
astr = "pressed: " + str(event.key())
self.keylist.append(astr)
def keyReleaseEvent(self, event):
if self.firstrelease == True:
self.processmultikeys(self.keylist)
self.firstrelease = False
del self.keylist[-1]
def processmultikeys(self,keyspressed):
print keyspressed
答案 2 :(得分:1)
没有什么是“同时”,我相信Qt你不能有这种行为(除了修改键,如shift,alt等)。
以不同的方式解决问题。当你收到其中一把钥匙时,检查你是否在短时间内收到另一把钥匙,比如说在20ms之前。