Qt keyPressEvent,“保持”和带有按钮/鼠标单击的keyReleaseEvent处理

问题描述 投票:2回答:1

我正在编写一个Qt程序来模拟一件硬件,我想模拟按钮的按下,保持和释放事件。在我的应用程序中,我想处理来自键盘和鼠标单击的输入,以使用户(即我)感到方便。我注意到一些奇怪的行为,但我听不懂。

应用程序使用启用了autoRepeat且100 ms autoRepeatDelayautoRepeatInterval的QPushButton。如果我在按钮上单击[[mouse click]],则会收到交替的“按下”和“释放”事件。我本来希望看到1到N-1个“按下”事件,然后是“已释放”事件。为什么Qt表现为这种方式?我还实现了以下代码来处理

keyboard

中的按钮按下:void MyApp::keyPressEvent(QKeyEvent *event) { QString s = QString("My PRESS key is %1. The counter is %2").arg(event->text(), QString::number(keyCounter)); qDebug() << s; keyCounter++; } void MyApp::keyReleaseEvent(QKeyEvent *event) { QString s = QString("My RELEASE key is %1. The counter is %2").arg(event->text(), QString::number(keyCounter)); qDebug() << s; keyCounter = 0; } bool MyApp::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::KeyPress) { this->keyPressEvent(dynamic_cast<QKeyEvent*>(event)); return true; } else if (event->type() == QEvent::KeyRelease) { this->keyReleaseEvent(dynamic_cast<QKeyEvent*>(event)); return true; } else { return QObject::eventFilter(obj, event); } }

我在这里看到两种类型的行为。对于字母数字键,我看到交替的“按下”和“释放”事件。对于箭头键,我仅看到“已发布”事件。同样,我希望看到1到N-1个“按下”事件,然后是“释放”事件。为什么箭头键的行为与字母数字键不同?

我想在Qt中做什么吗?

我正在编写一个Qt程序来模拟一件硬件,我想模拟按钮的按下,保持和释放事件。在我的应用程序中,我想同时处理键盘和...

qt qpushbutton qevent
1个回答
1
投票
[这是我的解决方案:首先,我禁用autoRepeat并停止处理keyPressEvents,因为我发现箭头键不是生成它们的原因。相反,我为我想使用的键盘按钮注册了快捷方式:
© www.soinside.com 2019 - 2024. All rights reserved.