3

OSXでQtRubyを使用してタイムロギングアプリケーションを作成しています。定期的にユーザー(私のチーム)に時間を記録するように通知することが重要です。できればフォアグラウンドに来て(必要に応じて最小化しないで)時間を記録してください。これはMacに非常に似ていないので、バウンドするタスクトレイアイコンを受け入れます。どちらも働けません。

とにかく、私は以下を試しました

self.show()
self.showNormal()
self.raise()
self.activateWindow()
self.maximize()
self.setWindowState(Qt::WindowActive)
self.setWindowState(Qt::WindowMaximized)

# Must execute this with GUI thread
msgbox = Qt::MessageBox.new()
msgbox.setText('LOG YOUR TIME!')
msgbox.exec()

これらのコマンドはすべて、最小化またはバックグラウンドで無視されるようです。メッセージボックスをポップアップしようとしたときに、「別のスレッドにある親の子を作成できない」という問題を回避しました。信号を発することでエラーが発生しますが、ユーザーがウィンドウをアクティブにするまでイベントは処理されないようです。

QTRubyまたはOSXのQT&C ++で最小化されたウィンドウをポップアップする方法を知っている人はいますか?

TIAルーク

4

1 に答える 1

3

私はルビースレッドではなくQtのスレッドを使用しましたが、今ではすべてが素敵です。たぶん、グローバルインタプリタロックと関係があるのか​​もしれません。

交換しました

Thread.new { loop { every_minute_do_on_diff_thread; sleep 60 } }
connect(self, SIGNAL('every_minute_do_signal()'), self, SLOT('every_minute_do()'))

def every_minute_do_on_diff_thread
  emit(every_minute_do_signal())
end

timer = Qt::Timer.new(self);
connect(timer, SIGNAL('timeout()'), self, SLOT('every_minute_do()'))
timer.start(60000)
于 2013-01-09T03:39:11.477 に答える