QT绘图时只能在GUI线程中做 界面卡死 如何解决?

adfdafdf111 2013-08-21 02:32:37
目前我的硬件资源有限,在绘制图片很大时,超过一分钟,本来想新开一个线程来做,提供取消功能,但是发现绘图这样的操作只能在主线程(GUI)中去做,
这样界面会卡死在那里,有什么解决办法么?
我尝试了在绘图循环中加入qApp->processEvents();方法来处理其他事件,但是使我绘图更加缓慢。
...全文
595 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
accsoar 2013-08-22
  • 打赏
  • 举报
回复
你在主线程创建QPixmap吧,然后想办法在子线程中使用,比如把Qpixmap封装为一个单例,或者其他方式; 子线程画完后,可以发一个消息,这个消息连接到gui线程的一个槽上,槽函数里边吧qpixmap贴到gui上就行了,这个也没什么好多说的了
adfdafdf111 2013-08-21
  • 打赏
  • 举报
回复
引用 5 楼 jiangcaiyang123 的回复:
QPixmap做深度复制,所以用赋值号是costless的,QPixmap可以在多个线程中使用,只要注意不要访问冲突即可。
QPixmap可以在多个线程使用吗? 为什么单开一个线程 创建一个QPixmap就报错了
彩阳 2013-08-21
  • 打赏
  • 举报
回复
QPixmap做深度复制,所以用赋值号是costless的,QPixmap可以在多个线程中使用,只要注意不要访问冲突即可。
adfdafdf111 2013-08-21
  • 打赏
  • 举报
回复
有代码更好哈
adfdafdf111 2013-08-21
  • 打赏
  • 举报
回复
引用 1 楼 accsoar 的回复:
现在一个子线程里把图片绘制到一个QPixmap上,画完后时间告知gui线程,此时GUI线程再把这个QPixmap贴到GUI上,这个贴的过程应该就很快了把 不知道你的图片多大,我是假定绘制慢主要是因为你的绘制太复杂导致的,而不是图片大
对你说的对 是因为需要画100W条线,所以很慢 你这种方法能解决 我在子线程里把QPixmap绘制完后,如何告知GUI线程,GUI线程如何使用QPixmap的呢? 有什么合理对方法么?请教哈~
accsoar 2013-08-21
  • 打赏
  • 举报
回复
另外,如果你的图片确实非常大而导致绘制慢,你得找办法优化 比如,图片是大,但同一时刻显示在屏幕上的只是一小部分,你就可以只绘制这一部分,拖动滚动条显示其他区域的时候再画新的区域
accsoar 2013-08-21
  • 打赏
  • 举报
回复
现在一个子线程里把图片绘制到一个QPixmap上,画完后时间告知gui线程,此时GUI线程再把这个QPixmap贴到GUI上,这个贴的过程应该就很快了把 不知道你的图片多大,我是假定绘制慢主要是因为你的绘制太复杂导致的,而不是图片大

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧