在OSX上使用QtRuby,定时器如何恢复最小化的窗口?

3
我正在使用QtRuby在OSX上编写一个时间记录应用程序。很重要的一点是它需要定期提醒用户(我的团队)记录时间,最好通过出现在前台(必要时取消最小化)。这不太符合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++弹出最小化的窗口吗?
谢谢 卢克
1个回答

3
我使用了Qt的线程而不是Ruby的线程,现在一切都很好。这可能与全局解释器锁有关。
我进行了替换。
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接