2011-11-05 34 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