• 7149阅读
  • 3回复

关于qpixmap的奇怪问题 [复制链接]

上一主题 下一主题
离线exaneral
 
只看楼主 倒序阅读 楼主  发表于: 2008-06-15
— 本帖被 XChinux 从 Qt Programming 移动到本区(2008-06-15) —
关键词: 图片
这几天在用qpixmap的时候,出现一个奇怪的问题:
我的程序是用qt designer写的,在串口类中建立成员变量qpixmap pixmap,然后对它进行绘画,之后再在合适的时候调用它。程序在台式机上运行没有问题,但在移植到arm上确出现调出的pixmap为空图--只有一张全黑图,没有绘画痕迹的现象。但如果在init()中对pixmap进行绘画的的话,移植到arm上则可以正常显示。
搞了很久没明白这事问什么....
我用的是qte2.3+qt3.3+tmake1.1
多谢大家啦!
[ 此贴被XChinux在2008-08-02 20:46重新编辑 ]
离线diyuanbo

只看该作者 1楼 发表于: 2008-06-15
检查一下串口类中对pixmap绘画时的线程环境,如果不是窗口线程,最好发送一个事件到窗口线程,然后在窗口线程中画那个pixmap。试试看。
离线exaneral
只看该作者 2楼 发表于: 2008-06-15
首先谢谢你的回复,我写错字了,是在主窗口类中建立pixmap私有变量
具体情况是这样的,我用的是单线程操作,但除了在init()中画图片能有痕迹以外,在程序的其他地方画则画不上。
上午我显示了一下painter变量,发现这么一个问题:
QPixmap pixmap;
QPainter painter;
if(painter.begin(&pixmap))
label->setText("ok“)
else
label->setText("wrong");
结果运行的时候label显示“wrong”
是不能正常打开pixmap的问题.......
很费解,怎么在init()中就可以呢?两个函数都是private,其他也没什么不同的阿
离线exaneral
只看该作者 3楼 发表于: 2008-06-16
已经解决了,真不好意思,耽误大家时间了
具体原因是因为我在源程序中定义了一个画笔,是这么定义的:
QPen mypen(Qt::white);
而我在Qt designer 中定义了一个class variable mypen
所以只能在init()画.....

另外,关于painter->begin(&pixmap)出错的问题,我觉得是这样:
如果定义painter 的时候是这么定义的:
QPainter painter(&pixmap);
那么就没有必要再painter.begin(&pixmap);
这句虽然会返回False但检测painter.isActive()还是会返回true,即可以在图上作画
如果不是要用painter在另外的图上作画,完全可以不用painter.end(),qt在本段程序结束时自己关闭

如果是这样定义:
QPainter painter;
则需要painter.begin(&pixmap);
和painter.end()
快速回复
限100 字节
 
上一个 下一个