通常,当按住键时,会调用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_Shift
和Qt::Key_Escape
。
任何人都知道如何解决这个问题?
答案 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
变量,查看当前是否保留了班次,并相应地更改了应用程序的行为。