Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt:使用Modkey(Shift、CTRL等)检测双击_Qt_Mouseevent_Qtgui_Modifier Key - Fatal编程技术网

Qt:使用Modkey(Shift、CTRL等)检测双击

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

我如何检测在按住修改键时是否双击QWidget(在我的例子中是QStatusBar)

我可以重载
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>的情况下测试两个修改键。工作起来就像一个符咒。。。