如何使QSystemTrayIcon类成为单独的线程类

时间:2012-05-08 15:44:31

标签: qt

我试图通过执行以下操作使我的QSystemTrayIcon类成为一个单独的线程类

  1. 从QThread
  2. 派生我的TrayIcon课程
  3. 在TrayIcon类中实现了run()方法
  4. 将TrayIcon Initialization代码移至Run method
  5. 从主要部门调用TryIcon.start()。

    但我的应用程序在TrayIcon类中执行“connect”语句时崩溃了。 connect语句用于trayIcon菜单功能。

    我试图通过阅读QT文档,示例来了解QThread,连接功能。

1 个答案:

答案 0 :(得分:0)

你做不到。所有GUI代码都必须驻留在GUI线程中。如果需要,可以在单独的QObject中实现托盘图标行为的耗时方面。然后将该QObject移动到一个单独的线程,并通过信号/插槽连接(不是直接插槽调用!)或发布事件从GUI线程与它进行通信。直接调用slot是没有意义的:插槽代码将在调用线程中执行,而这不是你想要的。

如果您想让生活更轻松,可以在QObject上公开便利插槽。这些只是连接到做实际工作的受保护或私人插槽。您将在QObject的构造函数中建立此类连接,并且它必须是QueuedConnection。然后,您可以直接调用便捷插槽:在幕后,Qt将对参数进行编组并将它们作为事件发布在QObject所在线程的事件队列中。该线程中的事件循环将从队列中获取它们dispatch调用在QObject中工作的插槽。