2010-02-12 97 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