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

Posted

技术标签:

【中文标题】Qt:使用 Modkey(Shift、CTRL 等)检测双击【英文标题】:Qt: Detect Double-Click with Modkey (Shift, CTRL, etc.) 【发布时间】:2010-02-12 14:18:13 【问题描述】:

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

我可以重载void QWidget::mouseDoubleClickEvent ( QMouseEvent * event ) 来获得双击,但是当它可能没有焦点时,我如何确定小部件是否接收到关键事件?

【问题讨论】:

【参考方案1】:

我找到了答案:

QMouseEvent 派生自 QInputEvent 并且有一个名为 modifiers() 的方法:

来自Qt documentation:

返回事件发生前就存在的键盘修饰符标志。

【讨论】:

您是否真的测试过这种方法,Qt Doc 也指出这些方法不是 100% 可信赖的。 是的,我在QWidget 上安装了一个事件过滤器,它将事件转换为QMouseEvent * 并测试两个修饰键以防事件类型为`QEvent::MouseButtonDblClick。像魅力一样工作......【参考方案2】:

如果您的(鼠标)事件或信号有一个 SLOT,您可以在那里测试修饰符:

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 

【讨论】:

【参考方案3】:

只是为了添加更多信息 在您的 QWidget 中,您只需要覆盖此方法

protected:
    void mouseDoubleClickEvent(QMouseEvent *event);

干杯

【讨论】:

以上是关于Qt:使用 Modkey(Shift、CTRL 等)检测双击的主要内容,如果未能解决你的问题,请参考以下文章

Qt creator 最常用的13个快捷键

Qt高级——QtCreator常用快捷键

如何在 Qt QTableView 中设置 Shift + 单击选择的初始索引?

如何退出qt creator全屏

QT IDE的基本使用

如何使用 webdriver.io 模拟 ctrl-click 或 shift-click?