• 5977阅读
  • 5回复

QPainter   两次drawPixmap导致线程停止继续运行 [复制链接]

上一主题 下一主题
离线sky_ysk
 
只看楼主 倒序阅读 楼主  发表于: 2012-01-06
关键词: qt4两次drawPixmap
环境:Linux 32位 Qt4.5.1或者4.7.4
UI是在一个独立的Qt线程中运行,QWidget刷新时使用update()
  1. struct ImageInfo    //结构体的定义
  2. {
  3.     int     iTextPos;
  4.     int     iWidth;
  5.     int     iHeight;
  6.     QPixmap  *pixmap;
  7.     ImageInfo()
  8.     {
  9.         iTextPos = 0;
  10.         iWidth = 0;
  11.         iHeight = 0;
  12.     }
  13. };
  14. QPainter painter;
  15. painter.begin(this);
  16. printf("drawPixmap 0");
  17. painter.drawPixmap(0, 0, *(pImageInfo->pixmap), 0, 0, pImageInfo->iWidth, height);
  18. printf("drawPixmap 1");
  19. painter.drawPixmap(0, height, pImageInfo->iWidth, pImageInfo->iHeight - height,
  20.     *(pImageInfo->pixmap), 0, height, pImageInfo->iWidth, 1);
  21. printf("drawPixmap 2");
  22. painter.end();

运行一段时间后,输出


drawPixmap 1


后,然后就停止在

painter.drawPixmap(0, height, pImageInfo->iWidth, pImageInfo->iHeight - height,
    *(pImageInfo->pixmap), 0, height, pImageInfo->iWidth, 1);

drawPixmap 2没输出,也没继续运行,widget仍然存在,其他线程也正常,Qt也没有出错提示
完全不知道是什么原因,请大家赐教
离线fish0619

只看该作者 1楼 发表于: 2012-01-06
qt不是不能多线程么。
离线tobbychen
只看该作者 2楼 发表于: 2012-01-10
Re:QPainter   两次drawPixmap导致线程停止继续运行
应该是painter的问题吧,同一个painter一个线程中貌似不能paint不同obj
离线jdwx

只看该作者 3楼 发表于: 2012-01-11
回 楼主(sky_ysk) 的帖子
还没解决呢?
其实你贴上来的代码还是太少。
如果QPixmap是从另外一个线程传过来的,那问题就在这里。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 4楼 发表于: 2012-01-11
回 楼主(sky_ysk) 的帖子
我做一个图片浏览器,为了防止GUI卡死,用一个线程处理图片,处理好了发信号传到主线程,一会正常一会不正常,搞不好几十张图片只能显示出一张图片。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线淳于半邪

只看该作者 5楼 发表于: 2012-01-11
学习了
快速回复
限100 字节
 
上一个 下一个