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 等)检测双击的主要内容,如果未能解决你的问题,请参考以下文章