0

我正在尝试将我的 QSystemTrayIcon 模块移动到单独的线程。运行应用程序时出现以下错误。Initialize() 方法 addAction 导致错误。

QWidget:必须在 QPaintDevice 之前构造一个 QApplication

我的示例代码片段:

声明了全局变量 QMenu myMenu;

头文件QAction* openFile中的成员变量;

在构造函数中 openFile = new QAction(parent);

Initialize() 
{
myMenu.addAction(openFile);
}

 void myApp::run()
 {
     Initialize()
 }
4

2 回答 2

0

不能在主线程之外使用任何与 GUI 相关的类,即在其中QApplication创建的类。因此,您不能QSystemTrayIcon在单独的线程中移动您的东西。不,没有解决方法。

于 2012-05-10T18:39:16.510 回答
0

您正在倒退解决这个问题。“如果在后台运行某些功能,则不显示 TrayIcon 菜单的原因菜单将在进程完成后显示。” 是因为您在等待时阻塞了 GUI 线程。不要通过等待来阻塞 GUI 线程。大多数 Qt 提供了在事情完成时触发的信号(当它们成功或失败时)。这些是您应该使用的非阻塞 API。

于 2012-06-01T08:13:52.607 回答