我有一个应用程序,其中每个线程(主线程除外)都需要创建自己的窗口.我尝试创建一个线程,然后在 run 函数中调用 this->exec() .但是,我什至在调用之前收到一个错误:ASSERT 在 QWidget 中失败:Widgets must be created in the GUI thread."
I have an application in which each thread (except the main thread) needs to create its own window. I tried creating a thread and then calling this->exec() in the run function. However, I get an error before I even get to that call: ASSERT failure in QWidget: "Widgets must be created in the GUI thread."
我想弹出一个消息窗口.问题是源有多个线程,每个线程可能需要弹出自己的消息.
I want to popup a message window. The problem is that the source has multiple threads each of which may need to popup its own message.
如果你需要在不同的(非主)线程中创建 QWidget(或其他一些 gui 组件),你可以在这样的线程中实现它方式:
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:
创建包含 gui 组件的简单包装器:
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;
}
};
在主线程中创建QApplication对象
create QApplication object in main thread
另一个线程主体:
..
// 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, :)
这篇关于如何在不同的 QT 线程中创建窗口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
如何在 C++ 中读取和操作 CSV 文件数据?How can I read and manipulate CSV file data in C++?(如何在 C++ 中读取和操作 CSV 文件数据?)
在 C++ 中,为什么我不能像这样编写 for() 循环:In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,为什么我不能像这样编写 for() 循环: for(
OpenMP 如何处理嵌套循环?How does OpenMP handle nested loops?(OpenMP 如何处理嵌套循环?)
在循环 C++ 中重用线程Reusing thread in loop c++(在循环 C++ 中重用线程)
需要精确的线程睡眠.最大 1ms 误差Precise thread sleep needed. Max 1ms error(需要精确的线程睡眠.最大 1ms 误差)
是否需要“do {...} while ()"?环形?Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?环形?)