我想异步创建一个小部件,然后将其分配给主线程中的一个对话框。我有一个函数来创建窗口部件:Qt - 如何异步创建窗口小部件?
shared_ptr<QTableWidget> createTable() {
auto table = make_shared<QTableWidget>()
// ... add some items to the table
return table;
}
当我同步调用此函数时,所有内容都按预期工作。问题是,当我调用这个函数异步:
auto futureWidget = QtConcurrent::run(createWidget);
我用QFutureWatcher::finished()
信号,并在窗口小部件创建完成后,我尝试在小部件添加到主/ GUI线程的对话框。
问题是,当我向表中添加一个项目时,它有时会与SIGSEG崩溃。有时它完成时,创建的小部件不显示。标准输出中还有很多关于在GUI线程外使用pixmap的警告。
难道不可以在Qt的不同线程中创建窗口小部件吗?如果有可能,怎么做?
这经常被问到。尝试使用关键字“qt thread gui”搜索SO – 2012-10-24 14:42:18
您最好在主线程中创建小部件,并稍后使用信号/插槽填充它。更好 - 使用[MVC](http://qt-project.org/doc/qt-4.8/model-view-programming.html)。 – elmigranto