создание QT GUI с использованием потока в C ++? - PullRequest
1 голос
/ 30 марта 2010

Я пытаюсь создать этот графический интерфейс QT, используя поток, но не повезло. Ниже мой код. Проблема в том, что графический интерфейс никогда не появляется.

/*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 Ответ

6 голосов
/ 30 марта 2010

Здесь, похоже, есть две основные проблемы:

  1. GUI не появляется, потому что ваша функция main() завершает работу после создания потока, что приводит к немедленному завершению процесса.
  2. GUI должен быть создан в главном потоке. Большинство фреймворков требуют, чтобы графический интерфейс пользователя создавался, изменялся и выполнялся в основном потоке. Вы создаете темы для работы и отправляете обновления в основной поток, а не наоборот.

Начните с обычного приложения, основанного на примере кода Qt. Если вы используете Qt Creator, он может предоставить вам большую помощь и скелетный код для начала работы. Затем, когда у вас есть рабочий графический интерфейс, вы можете начать добавлять рабочие потоки, если они вам нужны. Но вы должны сделать некоторые исследования по многопоточности, поскольку есть много ловушек для неосторожных. Веселись!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...