Итак, у меня есть приложение, где, если какая-то кнопка нажата, она воспроизводит звуковое устройство, когда кнопка отпускается, она останавливает аудиоустройство. Я использую keyPressEvent
и KeyReleaseEvent
осуществить это, который похож на код ниже:QKeyEvent isAutoRepeat не работает?
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if(event->isAutoRepeat())
{
event->ignore();
}
else
{
if(event->key() == Qt::Key_0)
{
qDebug()<<"key_0 pressed"<<endl;
}
else
{
QWidget::keyPressEvent(event);
}
}
}
void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
if(event->isAutoRepeat())
{
event->ignore();
}
else
{
if(event->key() == Qt::Key_0)
{
qDebug()<<"key_0 released"<<endl;
}
else
{
QWidget::keyReleaseEvent(event);
}
}
}
Но, по-видимому isAutoRepeat
функция не работает, как я могу видеть непрерывную печать из key_0 pressed
и key_0 released
несмотря на то, я не освобожден 0 после того, как я его нажал. Является ли мой код неправильным или что-то еще не так?
Спасибо.
EDIT
Я думаю, что это происходит потому, что MainWindow
теряет фокус клавиатуры. Как я могу узнать, какой виджет имеет фокус? Я на самом деле использую некоторые виджеты при нажатии Qt::Key_0
, но я думал, что я установил все эти возможные виджеты на Qt::NoFocus
, я думаю, что он не работает.
Я пытаюсь узнать, какой виджет имеет фокус, выполнив следующие действия:
QWidget * wigdet = QApplication::activeWindow();
qDebug()<<wigdet->accessibleName()<<endl;
, но он всегда печатает пустую строку. Как я могу заставить его напечатать имя виджета с фокусом на клавиатуре?
Является ли ваш класс 'MainWindow' или' ConsoleMainWindow'? Похоже, в вашем вопросе есть опечатка – IAmInPLS
Во-вторых, ваш код работает на меня, просто протестировал его. В документе указывается: «Обратите внимание, что если событие является сжатым событием с несколькими ключами, которое частично связано с автоматическим повторением, эта функция может возвращать либо true, либо false indeterminately'. Вы в этом случае? – IAmInPLS
@IAmInPLS Извините, это была опечатка, я изменил ее. Мой класс - MainWindow. –