If you need to create QWidget(or some other gui component(s)) in different(non-main) thread(s) you can implement it in such way:
-
Create simple wrapper which holds gui component:
// gui component holder which will be moved to main thread class gui_launcher : public QObject { QWidget *w; // other components //.. public: virtual bool event( QEvent *ev ) { if( ev->type() == QEvent::User ) { w = new QWidget; w->show(); return true; } return false; } };
-
create QApplication object in main thread
-
another thread body:
.. // create holder gui_launcher gl; // move it to main thread gl.moveToThread( QApplication::instance()->thread() ); // send it event which will be posted from main thread QCoreApplication::postEvent( &gl, new QEvent( QEvent::User ) ); ..
-
be happy, 🙂