2011-11-05 50 views
3

蘋果事件繼此處鏈接代碼:Trap click event on dock icon using Qt on Mac,我試圖直接調用下面的方法在我的QApplication的構造函數接收的Dock圖標點擊事件的通知:訂閱Qt中

[[NSAppleEventManager sharedAppleEventManager] 
    setEventHandler: m_dockIconClickEventHandler 
    andSelector: @selector(handleDockClickEvent:withReplyEvent:) 
    forEventClass: kCoreEventClass 
    andEventID: kAEReopenApplication]; 

如果我打電話它直接,我沒有收到此事件的通知。但是,如果我使用QTimer::singleShot將其稱爲延遲時間爲5000毫秒,那麼我會收到通知。

此外,根據Qt文檔,「一個超時間隔爲0的QTimer將在窗口系統事件隊列中的所有事件都被處理後立即超時。」所以我嘗試了0毫秒,但沒有奏效。 1或以上似乎。

爲什麼我需要等待以及處理這種情況的更好方法,而不是延遲n ms?

回答

2

當你的應用程序exec()被調用時,Qt設置它自己的事件處理程序,所以你的處理程序被覆蓋。 你可以在你的構造

connect(this, SIGNAL(setupDockEventMonitor()), SLOT(onSetupDockEventMonitor()), Qt::QueuedConnection); 
emit setupDockEventMonitor(); 

而且在onSetupDockEventMonitor使用()並安裝此事件處理程序。

+0

這正是我一直在尋找的!輝煌! – ariwez