【问题标题】:How to get multiple key presses in single event?如何在单个事件中获得多个按键?
【发布时间】:2011-11-02 20:47:38
【问题描述】:

我正在创建一个应用程序,其中“左箭头 + 下箭头”按下具有不同的行为(它与第一个左箭头和左箭头不同),目前在 keyPressEvent 事件中,我将它们一分为二地分开来电。

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

【问题讨论】:

标签: qt


【解决方案1】:

我通过下面的代码解决了这个问题。

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();
}

【讨论】:

  • 我在这里得到“无法将 int 转换为 Qt::Key”:QSet<:key> keysPressed; keysPressed+= 事件->key(); -> 怎么了?
【解决方案2】:

谢谢你。我正在发布 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

【讨论】:

    【解决方案3】:

    没有什么是“同时”的,我相信在 Qt 中你不能有这种行为(除了 shift、alt 等修饰键)。

    以不同的方式解决问题。当您收到其中一个密钥时,请检查您是否在短时间内收到另一个密钥,例如 20 毫秒之前。

    【讨论】:

    • Qt按键事件中的按键组合非常有用的信息。
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多