简介
今天在做快捷键需求时,发现了一个问题,qt的键盘事件不能捕获多个按键按下.即便是在使用modifiers()时,也只能获得类似于shfit+x,ctrl+c,alt+y等等之类的快捷键,对于shift+x+c诸如此类更多的组合就无能为力的.
于是各种网上查找资料即查阅文档得知,qt的键盘事件机制一次每次只能获取一个按键(排除shift,alt,ctrl等特殊按键),因此在需要获取多个按键按下或者同时按下时,就需要保存每个按下的按按键,在弹起时在删除弹起的按键.
值得注意的是当按键一直被按下时也会出发keyPressEvent()和keyReleaseEvent()函数,因此加入判断.
实现
主要还是重写qt的键盘事件函数
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
.cpp
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if(event->isAutoRepeat())//如果是一直按下按钮触发直接返回
return;
QString command= getKeyText(event->key());
if(!m_keycommand.contains(command))
m_keycommand.push_back(command);
qDebug()<<m_keycommand;
}
void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
if(event->isAutoRepeat())//如果是一直按下按钮触发直接返回
return;
QString command=getKeyText(event->key());
m_keycommand.removeOne(command);
qDebug()<<m_keycommand;
}
本文解决Qt中无法捕捉多个按键同时按下的问题。通过重写keyPressEvent与keyReleaseEvent函数,并加入判断防止重复触发,实现了多键组合的功能。

875

被折叠的 条评论
为什么被折叠?



