4

ここからリンクされたコードに従って: Mac で Qt を使用してドック アイコンのクリック イベントをトラップし、QApplication のコンストラクターで次のメソッドを直接呼び出して、ドック アイコンのクリック イベントの通知を受信しようとしました。

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

直接呼び出すと、このイベントの通知を受け取りません。ただし、QTimer::singleShotたとえば 5000 ミリ秒の遅延を使用して呼び出すと、通知を問題なく受け取ります。

また、Qt のドキュメントによると、「タイムアウト間隔が 0 の QTimer は、ウィンドウ システムのイベント キュー内のすべてのイベントが処理されるとすぐにタイムアウトします。」だから私は0ミリ秒を試しましたが、うまくいきませんでした。1以上のようです。

なぜ待機する必要があるのですか? nミリ秒遅延するよりも、この状況を処理するためのより良い方法は何ですか?

4

1 に答える 1

3

アプリケーション exec() が呼び出されると、Qt は独自のイベント ハンドラーを設定するため、ハンドラーはオーバーライドされます。コンストラクターで使用できます

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

そして onSetupDockEventMonitor() で、このイベント ハンドラーをインストールします。

于 2012-03-30T08:14:49.233 に答える