Подписка на события Apple в Qt - PullRequest
3 голосов
/ 05 ноября 2011

Следуя приведенному здесь коду: Событие перехвата щелчка на значке док-станции с использованием Qt на Mac , я попытался вызвать следующий метод непосредственно в конструкторе моего QApplication, чтобы получить уведомление о событиях щелчка значка док-станции:

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

Если я позвоню напрямую, я не получу уведомления об этом событии.Однако, если я вызываю его, используя QTimer::singleShot с задержкой, скажем, 5000 мс, я получаю уведомления просто отлично.

Также, согласно документации Qt, "QTimer с интервалом ожидания 0истечет, как только все события в очереди событий оконной системы будут обработаны. "Поэтому я попробовал 0 мс, но это не сработало.1 или выше.

Зачем мне ждать и как лучше справиться с этой ситуацией, чем задержка на n мс?

1 Ответ

2 голосов
/ 30 марта 2012

Когда ваше приложение exec () вызывается, Qt устанавливает свои собственные обработчики событий, поэтому ваш обработчик переопределяется.Вы можете использовать в своем конструкторе

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

А в onSetupDockEventMonitor () установить этот обработчик событий.

...