QPainter drawPixmap导致程序停止继续运行

Sky-Yang 2012-01-05 04:05:25

QPainter painter;
painter.begin(this);

printf("drawPixmap 0");

painter.drawPixmap(0, 0, pixmap, 0, 0, iWidth, iPox);

printf("drawPixmap 1");

painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);

printf("drawPixmap 2");

painter.end();

程序是在Linux下面运行,上面代码是在QWidget的void paintEvent(QPaintEvent *);中处理。
经常是在输出 drawPixmap 1 后停止在drawPixmap就不跑了,也没出错,其他线程也在正常运行,
printf("drawPixmap 1");

painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);

printf("drawPixmap 2");
注:pixmap是在保存在一个list结构体中,这里省略了结构体的表示,输出时pixmap数据是正确的,其他参数也没有问题。这个线程就只有在这里两次drawPixmap时第二次drawPixmap就没继续输出了。
请问有没有人遇到该问题或者知道怎么解决的请告知,谢谢
...全文
490 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
DIE654456 2012-01-10
  • 打赏
  • 举报
回复
printf在qt里打印是会延迟的,
你可以把printf换成qDebug看看。
Sky-Yang 2012-01-10
  • 打赏
  • 举报
回复
我这里的环境下要单步调试出问题比较麻烦,服务器上面的Qt是4.5.1,而且这个问题是不时出现,而且在windows下面Qt4.7.4并未出现问题
还是感谢大家的回复
zephirus_forever 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sky_yskabc 的回复:]

引用 10 楼 zephirus_forever 的回复:
引用 5 楼 sky_yskabc 的回复:
纠正一下,不是第二个drawpixmap没画出来,而是停止在下面的语句
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);
而printf("drawPixmap 2");不……
[/Quote]
我测了,我把你的代码原封不动在我这里执行了一下,当然给每个变量随便赋值,然后正常通过
结论:如果参数没有问题,包括那个pixmap,那就是环境问题,我们不是来玩大家来找茬的,你把你有问题的代码中对的那部分贴出来让人找错,唉。
jdwx 2012-01-10
  • 打赏
  • 举报
回复
QPainter painter;
painter.begin(this);

还有为什么这么写?
我一直这样写:
QPainter painter(this);
jdwx 2012-01-10
  • 打赏
  • 举报
回复
一切都正常,可是代码就是不工作,为什么呢?
答案是:代码肯定有问题!
排除法,先用一个新的pixmap替换,看看效果。
不行再用固定数值替换参数。
Sky-Yang 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zephirus_forever 的回复:]
引用 5 楼 sky_yskabc 的回复:
纠正一下,不是第二个drawpixmap没画出来,而是停止在下面的语句
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);
而printf("drawPixmap 2");不会运行到

你都停在第二句上了还大言不惭地说画出来了。。至少……
[/Quote]
painter.drawPixmap(0, 0, pixmap, 0, 0, iWidth, iPox);

第一个drawpixmap已经是画出来了,界面上看到了,谢谢!
第二个drawpixmap不是没画出来,也不能说画出来了,而是停在那里!
至于位置参数肯定是没问题,就算参数错了,drawpixmap内部也会纠正,依然能够继续运行,你看看drawpixmap的实现代码就知道了
两个drawpixmap都是同一个pixmap参数,就算我是幼儿级别,也请你小学生哥哥赐教,解决这问题
Sky-Yang 2012-01-06
  • 打赏
  • 举报
回复
纠正一下,不是第二个drawpixmap没画出来,而是停止在下面的语句
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);
而printf("drawPixmap 2");不会运行到

Sky-Yang 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zephirus_forever 的回复:]
你没明白我的意思,这不是省略什么的问题,事实上,我如果没有猜错,问题很可能就出在你的结构体上,drawpixmap这个函数以及painter的调用,看上去没有什么问题。
[/Quote]

第一个drawpixmap已经画出来了,第二个drawpixmap才没画出来,这也跟结构体有关?
zephirus_forever 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sky_yskabc 的回复:]
纠正一下,不是第二个drawpixmap没画出来,而是停止在下面的语句
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);
而printf("drawPixmap 2");不会运行到
[/Quote]
你都停在第二句上了还大言不惭地说画出来了。。至少也要界面上看到才算。算了,就你这个态度,还认为自己总是对的,何必来问这种幼儿级别的问题。
jdwx 2012-01-06
  • 打赏
  • 举报
回复
说实话就这样一个问题,有多难解决,只要设一个断点,单步运行,看看为什么没有执行,printf("drawPixmap 2");
Sky-Yang 2012-01-06
  • 打赏
  • 举报
回复
尽是些无聊的回答,求删帖,不来CSDN了
Sky-Yang 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jdwx1 的回复:]
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);
不只是要检查QPixmap是否可用,还要看看iPos、、、是不是可用,有没有不合格的参数。
再看看QtCreator下面是输出窗口有没有错误提示。
[/Quote]

第一个drawPixmap已经画出来了,所以pixmap没问题,参数的值都是在有效范围内
jdwx 2012-01-06
  • 打赏
  • 举报
回复
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);
不只是要检查QPixmap是否可用,还要看看iPos、、、是不是可用,有没有不合格的参数。
再看看QtCreator下面是输出窗口有没有错误提示。
zephirus_forever 2012-01-05
  • 打赏
  • 举报
回复
你没明白我的意思,这不是省略什么的问题,事实上,我如果没有猜错,问题很可能就出在你的结构体上,drawpixmap这个函数以及painter的调用,看上去没有什么问题。
Sky-Yang 2012-01-05
  • 打赏
  • 举报
回复
已经说过了,省略了结构体的表示,程序中是这样处理的
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, 结构体指针->pixmap, 0, iPox, iWidth, 1);
这个是另外的问题
zephirus_forever 2012-01-05
  • 打赏
  • 举报
回复
很奇怪的感觉,这里pixmap的参数是一个引用,也就是说你的list内放的是QPixmap而不是QPixmap指针,那么从list拿pixmap的时候是不是会走到一个QPixmap的默认拷贝构造函数?试试看list内放Pixmap指针new出来的办法,至少这个办法我用过?

16,216

社区成员

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

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