QT 报错 QWidget:Widgets must be created in the GUI thread

技术分享 2021-10-28 17:49:18

任务线程中要搞个桌面截图,遇到 QWidget:Widgets must be created in the GUI thread


原因:

这个问题是qt其他线程中使用gui的组件造成的

QT只有一个GUI 线程,默认就是main函数中初始化的那个主线程。其他线程是没有gui资源的,不能使用gui相关的组件

比如网路,文件读写,其他非gui功能任务


解决办法:信号-槽

从任务线程发送信号给gui线程去执行


记得用 Qt::BlockingQueuedConnection 链接类型,这个可以确保槽函数在接受信号也就是gui的线程中去完成。

同时可以阻塞等待一个返回值。