所以,我有一个应用程序,如果按住特定按钮,它会播放音频设备,当释放按钮时,它会停止音频设备。我使用keyPressEvent
并KeyReleaseEvent
实现它,它类似于下面的代码:
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 键后没有释放它。是我的代码错误还是其他错误?
谢谢。
编辑
我认为这是因为MainWindow
失去了键盘焦点。我如何才能真正找出哪个小部件具有焦点?按下时我实际上正在使用一些小部件Qt::Key_0
,但我认为我将所有这些可能的小部件设置为Qt::NoFocus
,我想它不起作用。
我试图通过执行以下操作来了解哪个小部件具有焦点:
QWidget * wigdet = QApplication::activeWindow();
qDebug()<<wigdet->accessibleName()<<endl;
但它总是打印一个空字符串。如何让它打印具有键盘焦点的小部件的名称?