【发布时间】:2014-09-14 21:59:27
【问题描述】:
我正在编写一个 Qt 程序来模拟一个硬件,我想模拟按钮按下、按住和释放事件。在我的应用程序中,我想处理来自键盘和鼠标点击的输入,以方便用户(即我)。我注意到一些奇怪的行为,但我不明白。
应用程序使用 QPushButton 并启用 autoRepeat 和 100 毫秒 autoRepeatDelay 和 autoRepeatInterval。如果我鼠标单击按钮,我会收到交替的“按下”和“释放”事件。我本来希望看到 1 到 N-1 个“按下”事件,然后是一个“发布”事件。为什么 Qt 会这样?
我还实现了以下代码来处理来自键盘的按钮按下:
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 中做的事情可能吗?
【问题讨论】:
-
"如果启用了自动重复,那么当按钮按下时,pressed()、release() 和 clicked() 信号会定期发出。一开始我并没有完全理解这一点——看起来这是重复事件的根源。我必须生成自己的解决方案。
-
您期望的行为似乎与 Windows API 相当......但 X11 Gui 的工作方式不同......不知道关于 Wayland。我的猜测是 qt 模拟了统一的行为
标签: qt qpushbutton qevent