当前位置: 代码迷 >> QT开发 >> QPainter drawPixmap导致程序停止继续运行,该怎么解决
  详细解决方案

QPainter drawPixmap导致程序停止继续运行,该怎么解决

热度:637   发布时间:2016-04-25 05:05:38.0
QPainter drawPixmap导致程序停止继续运行
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");
------解决方案--------------------
探讨
纠正一下,不是第二个drawpixmap没画出来,而是停止在下面的语句
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);
而printf("drawPixmap 2");不会运行到

------解决方案--------------------
一切都正常,可是代码就是不工作,为什么呢?
答案是:代码肯定有问题!
排除法,先用一个新的pixmap替换,看看效果。
不行再用固定数值替换参数。

------解决方案--------------------
QPainter painter;
painter.begin(this);

还有为什么这么写?
我一直这样写:
QPainter painter(this);
------解决方案--------------------
探讨

引用:
引用:
纠正一下,不是第二个drawpixmap没画出来,而是停止在下面的语句
painter.drawPixmap(0, iPox, iWidth, iHeight - iPox, pixmap, 0, iPox, iWidth, 1);
而printf("drawPixmap 2");不……