Подписка на события Apple в Qt

Следуя приведенному здесь коду: Перехватив событие щелчка по значку в доке с помощью 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 мс?


person Jake Petroules    schedule 05.11.2011    source источник


Ответы (1)


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

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

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

person Sergei Nevdakh    schedule 30.03.2012
comment
Это именно то, что я искал! Великолепно! - person ariwez; 14.06.2013