使用c ++中的线程创建QT gui?

时间:2010-03-29 21:29:42

标签: c++ user-interface qt multithreading

我正在尝试使用线程创建此QT gui但没有运气。以下是我的代码。问题是gui永远不会出现。

/*INCLUDES HERE...
....
*/

using namespace std;

struct mainStruct {

 int s_argc;
 char ** s_argv;

};

typedef struct mainStruct mas;

void *guifunc(void * arg);

int main(int argc, char * argv[]) {

 mas m;<br>
 m.s_argc = argc;
 m.s_argv = argv;

 pthread_t threadGUI;

 //start a new thread for gui
 int result = pthread_create(&threadGUI, NULL, guifunc, (void *) &m);

 if (result) {
     printf("Error creating gui thread");
  exit(0);
 }

   return 0; 
}

void *guifunc(void * arg)
{

 mas m = *(mas *)arg;

 QApplication app(m.s_argc,m.s_argv);

 //object instantiation
 guiClass *gui = new guiClass();

 //show gui
 gui->show();

 app.exec(); 
}

1 个答案:

答案 0 :(得分:6)

这里似乎有两个主要问题:

  1. GUI未显示,因为您的main()函数在创建线程后正在完成,从而导致进程立即退出。
  2. 应在主线程上创建GUI。大多数框架都需要在主线程上创建,修改和执行GUI。你产生线程来做工作并将更新发送到主线程,而不是相反。
  3. 从基于Qt示例代码的常规应用程序开始。如果你使用Qt Creator,它可以提供大量的帮助和骨架代码来帮助你入门。然后,一旦有了可用的GUI,就可以开始考虑在需要时添加工作线程。但你应该对多线程问题进行一些研究,因为对于那些粗心大意的人来说存在许多陷阱。玩得开心!