保持按住特定键(shift键)时未正确调用keyPressEvent

时间:2014-02-28 09:49:33

标签: qt keyboard keypress shift

通常,当按住键时,会调用keyPressEvent函数 和QApplication :: keyboardInputInterval()一样经常被设置为。 但是它对shift,ctrl或alt等键不起作用。

这是正确执行:

void Renderer::keyPressEvent(QKeyEvent *event)
{
  if(event->key() == Qt::Key_Escape) qDebug() << "executing";
}

按下按钮时只执行一次:

void Renderer::keyPressEvent(QKeyEvent *event)
{
  if(event->key() == Qt::Key_Shift) qDebug() << "executing";
}

唯一的区别是Qt::Key_ShiftQt::Key_Escape。 任何人都知道如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作。

if(QApplication::keyboardModifiers() & Qt::ShiftModifier)
{
     //Things need to do while holding SHIFT key.
}

else
{
     //Things need to do while not holding SHIFT key.
}

答案 1 :(得分:1)

这是设计的。修改键没有自动重复,它没有意义。无论是向下还是向上。

如果你需要它(用于什么?),你需要自己实现修改键自动重复。

答案 2 :(得分:1)

不确定这个答案是否为时已晚,无法帮助您处理应用程序,但是可以解决使用重复事件的问题。

bool shiftHeld = false;

void keyPressEvent(QKeyEvent *event) {
  if(event->key() == Qt::Key_Shift)
    shiftHeld = true;
}

void keyReleaseEvent(QKeyEvent *event) {
  if(event->key() == Qt::Key_Shift)
    shiftHeld = false;
}

只需检查shiftHeld变量,查看当前是否保留了班次,并相应地更改了应用程序的行为。