Qt:使用Modkey(Shift、CTRL等)检测双击
我如何检测在按住修改键时是否双击QWidget(在我的例子中是QStatusBar) 我可以重载Qt:使用Modkey(Shift、CTRL等)检测双击,qt,mouseevent,qtgui,modifier-key,Qt,Mouseevent,Qtgui,Modifier Key,我如何检测在按住修改键时是否双击QWidget(在我的例子中是QStatusBar) 我可以重载void QWidget::mouseDoubleClickEvent(QMouseEvent*event)以获得双击,但如何确定小部件在没有焦点时是否接收到关键事件?我找到了答案: QMouseEvent是从QInputEvent派生出来的,它有一个名为modifiers()的方法: 从: 返回事件发生前存在的键盘修改器标志 只是为了补充更多信息 在QWidget中,您只需要覆盖此方法 protec
void QWidget::mouseDoubleClickEvent(QMouseEvent*event)
以获得双击,但如何确定小部件在没有焦点时是否接收到关键事件?我找到了答案:
QMouseEvent
是从QInputEvent
派生出来的,它有一个名为modifiers()
的方法:
从:
返回事件发生前存在的键盘修改器标志
只是为了补充更多信息 在QWidget中,您只需要覆盖此方法
protected:
void mouseDoubleClickEvent(QMouseEvent *event);
干杯如果您有(鼠标)事件或信号的插槽,您可以在那里测试修改器:
Qt::KeyboardModifiers modifiers = QApplication::queryKeyboardModifiers ();
if(modifiers.testFlag( Qt::ControlModifier )){
qDebug() << "CTRL was hold when this function was called";
}
else{
qDebug() << "CTRL wasn't hold";
}
//SHIFT = Qt::ShiftModifier
//CTRL = Qt::ControlModifier
//ALT = Qt::AltModifier
Qt::KeyboardModifiers modifiers=QApplication::queryKeyboardModifiers();
if(modifiers.testFlag(Qt::ControlModifier)){
qDebug()你真的测试过这种方法吗,Qt Doc还声明这些方法不是100%可信的。是的,我在QWidget
上安装了一个事件过滤器,它将事件转换为QMouseEvent*
,并在事件类型为`QEvent::MouseButtonDblClick>的情况下测试两个修改键。工作起来就像一个符咒。。。