- C/C++ code
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就没继续输出了。
请问有没有人遇到该问题或者知道怎么解决的请告知,谢谢
------解决方案--------------------
很奇怪的感觉,这里pixmap的参数是一个引用,也就是说你的list内放的是QPixmap而不是QPixmap指针,那么从list拿pixmap的时候是不是会走到一个QPixmap的默认拷贝构造函数?试试看list内放Pixmap指针new出来的办法,至少这个办法我用过?
------解决方案--------------------
你没明白我的意思,这不是省略什么的问题,事实上,我如果没有猜错,问题很可能就出在你的结构体上,drawpixmap这个函数以及painter的调用,看上去没有什么问题。
------解决方案--------------------
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);
不只是要检查QPixmap是否可用,还要看看iPos、、、是不是可用,有没有不合格的参数。
再看看QtCreator下面是输出窗口有没有错误提示。
------解决方案--------------------
说实话就这样一个问题,有多难解决,只要设一个断点,单步运行,看看为什么没有执行,printf("drawPixmap 2");
------解决方案--------------------
------解决方案--------------------
一切都正常,可是代码就是不工作,为什么呢?
答案是:代码肯定有问题!
排除法,先用一个新的pixmap替换,看看效果。
不行再用固定数值替换参数。
------解决方案--------------------
QPainter painter;
painter.begin(this);
还有为什么这么写?
我一直这样写:
QPainter painter(this);
------解决方案--------------------