【发布时间】:2012-10-25 00:14:00
【问题描述】:
我想异步创建一个小部件,然后将其分配给主线程中的对话框。我有一个创建小部件的功能:
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
-
您最好在主线程中创建小部件并使用信号/插槽稍后填充它。更好——使用MVC。