按住特定键(换档键)时未正确调用Qt键PressEvent



通常,当按下键时,会调用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";
}

唯一的区别是CCD_ 1和CCD_。有人知道怎么解决这个问题吗?

您可以执行以下操作。

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

这是经过设计的。修改键没有自动重复功能,这将毫无意义。它们要么向下,要么向上。

如果您需要它(为什么?),您需要自己实现修饰符密钥自动重录。

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

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变量,查看当前是否持有shift,并相应地更改应用程序的行为。

最新更新