3

如何检测在按住修饰键时是否双击 QWidget(在我的情况下为 QStatusBar)?

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

4

3 回答 3

2

我找到了答案:

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

Qt 文档

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

于 2010-02-12T14:22:03.860 回答
1

如果您的(鼠标)事件或信号有一个 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 
于 2013-07-28T20:32:41.377 回答
0

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

protected:
    void mouseDoubleClickEvent(QMouseEvent *event);

干杯

于 2012-04-12T21:05:37.207 回答