按下按钮时没有事件捕获[QT]
No event catch during button pressed [ QT ]
我必须制作虚拟键盘。
因此,我创建了几个QPushButton
s,但是如果我单击一个,然后移动在另一个上释放,则另一个按钮不会收到任何鼠标事件。
i要覆盖enterEvent(QEvent *)
和leaveEvent(QEvent *)
,但是当我单击另一个按钮时,没有成功。
有人有一个主意吗?
在qabstractbutton代码中:
void QAbstractButton::mousePressEvent(QMouseEvent *e)
{
Q_D(QAbstractButton);
if (e->button() != Qt::LeftButton) {
e->ignore();
return;
}
if (hitButton(e->pos())) {
setDown(true);
d->pressed = true;
repaint(); //flush paint event before invoking potentially expensive operation
QApplication::flush();
d->emitPressed();
e->accept();
} else {
e->ignore();
}
}
当MousePressEvent触发器时,Qabstractbutton调用setDown(true)
和Qabstractbuttonprivate(Q_D(QAbstractButton)
)调用d->emitPressed()
。之后,其他按钮将无法收到任何事件,它们已经在活动按钮中处理。
您可以在mouseReleaseEvent
void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)
{
Q_D(QAbstractButton);
d->pressed = false;
if (e->button() != Qt::LeftButton) {
e->ignore();
return;
}
if (!d->down) {
// refresh is required by QMacStyle to resume the default button animation
d->refresh();
e->ignore();
return;
}
if (hitButton(e->pos())) {
d->repeatTimer.stop();
d->click();
e->accept();
} else {
setDown(false);
e->ignore();
}
}
它还检查状态d->down
。如果鼠标命令该按钮,它将调用d->click();
emit单击事件。如果鼠标未点击按钮,它将setDown(false);
调用以重置状态。
我建议从Qwidget继承虚拟按钮,以更轻松地处理鼠标事件。
相关文章:
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- 具有Qt事件循环的可移植通用共享库设置
- 如何通过拖动鼠标QT检查按钮?鼠标移动事件
- Qt:事件过滤器在显示 QCompleter 时不接收按键
- Qt 中的去抖动事件过滤器
- QT 事件过滤器 mouseEvent->pos().x() 始终为零,但 mouseEvent->pos().y() 工作正常
- Qt应用程序不响应鼠标和键盘事件
- Qt将鼠标移动事件转移到新窗口
- 如何从qml Keys.oPressed调用qt keyPressEvent(QKeyEvent*事件)
- Qt-如何在Qt3DWindow上获取鼠标事件
- QT事件当小部件视线视线时
- DLL中的QT事件循环
- 在QML上下文中处理QT C 事件
- Qt 事件过滤器未检测到对象名称
- QT 事件仅对部分小部件透明
- 未捕获QT事件筛选器中的键盘快捷键(强制文本为大写)
- qtreeview的qt事件筛选器不工作
- Qt事件后,长例程冻结了我的应用程序一段时间
- Qt -事件监听器的树小部件项目单击
- 如何防止QT事件堆栈溢出