Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C++中的线程创建QT-GUI?_C++_User Interface_Qt_Multithreading - Fatal编程技术网

用C++中的线程创建QT-GUI?

用C++中的线程创建QT-GUI?,c++,user-interface,qt,multithreading,C++,User Interface,Qt,Multithreading,我试图用一个线程创建这个QtGUI,但运气不好。下面是我的代码。问题是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[]) { m

我试图用一个线程创建这个QtGUI,但运气不好。下面是我的代码。问题是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(); 
}

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

GUI没有出现,因为您的主功能在创建线程后完成,因此导致进程立即退出。 GUI应该在主线程上创建。大多数框架要求在主线程上创建、修改和执行GUI。您可以生成线程来执行工作并向主线程发送更新,而不是相反。
根据Qt示例代码,从常规应用程序开始。如果您使用QtCreator,它可以提供大量帮助和框架代码来帮助您入门。一旦您有了一个工作GUI,您就可以开始考虑在需要时添加工作线程。但是您应该对多线程问题进行一些研究,因为粗心的人有很多陷阱。玩得开心

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

GUI没有出现,因为您的主功能在创建线程后完成,因此导致进程立即退出。 GUI应该在主线程上创建。大多数框架要求在主线程上创建、修改和执行GUI。您可以生成线程来执行工作并向主线程发送更新,而不是相反。
根据Qt示例代码,从常规应用程序开始。如果您使用QtCreator,它可以提供大量帮助和框架代码来帮助您入门。一旦您有了一个工作GUI,您就可以开始考虑在需要时添加工作线程。但是您应该对多线程问题进行一些研究,因为粗心的人有很多陷阱。玩得开心

我修正了你的代码格式,但我注意到你之前的几个问题也需要其他海报修正代码格式。请花几分钟时间了解StackOverflow的标记格式语言的工作原理:。这个链接也可以在你写问题的框的右边找到。谢谢泰勒的编辑。我实际上把。。。标签,但不确定为什么它没有正确显示。我将查看上面提到的链接。它没有正确显示,因为标记不是StackOverflow上的代码格式,因此需要阅读markdown语言。Stack overflow使用markdown,不像许多其他网站那样使用标记。需要一段时间来适应,但过了一段时间就很好了。例如,代码块通过至少用4个空格缩进来表示。仔细阅读泰勒给你的链接,你很快就会把它记下来!我修正了你的代码格式,但我注意到你之前的几个问题也需要其他海报修正代码格式。请花几分钟时间了解StackOverflow的标记格式语言的工作原理:。这个链接也可以在你写问题的框的右边找到。谢谢泰勒的编辑。我实际上把。。。标签,但不确定为什么它没有正确显示。我将查看上面提到的链接。它没有正确显示,因为标记不是StackOverflow上的代码格式,因此需要阅读markdown语言。Stack overflow使用markdown,不像许多其他网站那样使用标记。需要一段时间来适应,但过了一段时间就很好了。例如,代码块通过至少用4个空格缩进来表示。仔细阅读泰勒给你的链接,你很快就会把它记下来!没错。文档清楚地表明,除了main之外,您不能在其他线程中创建GUI。阅读我链接的整个页面,你们现在应该都清楚了。没错。文档清楚地表明,除了main之外,您不能在其他线程中创建GUI。阅读我链接的整个页面,你们现在应该都清楚了。