2010-02-12 92 views
3

如何检测QWidget(QStatusBar,在我的情况下)是否在修改键被按下时发生双击?Qt:使用Modkey检测双击(Shift,CTRL等)

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

回答

2

我找到了答案:

QMouseEventQInputEvent衍生,并且具有一个名为modifiers()方法:

Qt documentation

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

+0

你真的测试过这种方法吗,Qt Doc指出这些并不是100%可信的。 – drahnr 2010-02-12 18:20:35

+0

是的,我有一个事件过滤器安装在'QWidget'上,该事件过滤器将事件转换为'QMouseEvent *'并测试两个修饰键以防事件类型为'QEvent :: MouseButtonDblClick。奇迹般有效... – fawick 2010-02-15 10:50:09

0

只需添加更多的信息 在QWidget中,你只需要如果您对您的(鼠标)事件或信号,可以将SLOT重写此方法

protected: 
    void mouseDoubleClickEvent(QMouseEvent *event); 

欢呼

1

测试那里的修饰语:

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