2015-10-16 21 views
1

我想在左鍵單擊時顯示上下文菜單,然後雙擊運行應用程序。 爲此,我有下面的代碼:QSystemTrayIcon激活信號:DoubleClick without Trigger

... 
connect(this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(slotActivated(QSystemTrayIcon::ActivationReason))); 
... 
void MyTray::slotActivated(ActivationReason reason) 
{ 
    if(reason==QSystemTrayIcon::DoubleClick) 
     startApp(); 
    else 
     if(reason==QSystemTrayIcon::Trigger 
      || reason==QSystemTrayIcon::MiddleClick) 
       contextMenu()->popup(QCursor::pos()); 
} 

它的工作原理,但對於雙擊情況下,我有兩個插槽電話 - 一個用於觸發,然後才適用於DoubleClick。結果上下文菜單顯示並隱藏片刻。 有沒有辦法避免這種情況?

回答

2

而不是使用slotActivated,您需要處理鼠標事件。

雖然這些不是直接在QSystemTrayIcon中可用,但它確實允許您登錄install an event filter並從那裏處理鼠標事件。

+0

好主意,但我仍然希望有一個更直接的解決方案 – johngull

+2

嗯,你可以使用一個計時器,等待片刻,看看它實際上是一個雙擊([這裏的例子](http:// pastebin。 com/5JWykSgU)),但事件過濾器是真正的方式去和恕我直言,也相當直接了當。 – TheDarkKnight

+3

在這個例子中,通過'QApplication :: doubleClickInterval()'替換'300'更好。 – Ilya