【问题标题】:Subscribing to Apple events in Qt在 Qt 中订阅 Apple 事件
【发布时间】:2011-11-05 08:00:11
【问题描述】:

按照此处链接的代码:Trap click event on dock icon using Qt on Mac,我尝试在 QApplication 的构造函数中直接调用以下方法来接收停靠图标单击事件的通知:

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

如果我直接调用它,我不会收到此事件的通知。但是,如果我使用 QTimer::singleShot 调用它并延迟 5000 毫秒,我就会收到通知。

此外,根据 Qt 文档,“一旦窗口系统的事件队列中的所有事件都已处理完毕,超时间隔为 0 的 QTimer 就会超时。”所以我尝试了 0 毫秒,但这没有用。 1或以上似乎。

为什么我需要等待?有什么比延迟 n 毫秒更好的方法来处理这种情况?

【问题讨论】:

    标签: cocoa qt appleevents


    【解决方案1】:

    当您的应用程序 exec() 被调用时,Qt 会设置自己的事件处理程序,因此您的处理程序会被覆盖。 您可以在构造函数中使用

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

    并在 onSetupDockEventMonitor() 中安装此事件处理程序。

    【讨论】:

    • 这正是我一直在寻找的!太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多