如何在单个事件中获得多个按键?

时间:2011-08-24 14:15:43

标签: qt

我正在创建一个应用程序,其中“左箭头+向下箭头”按下具有不同的行为(它与第一个左箭头然后左箭头不同),目前在keyPressEvent事件中我将它们逐个地分成两个调用。

有什么方法可以在一个键盘事件中获得多个按键吗?

3 个答案:

答案 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之前。