QImage和QPixmap

QImage和QPixmap都是可以用于显示图片的,但是有一些不同。比如说QPixmap是与硬件关联的,而QImage是硬件独立的。硬件关联的一个特点是不可以跨线程访问。就是说QImage可以单独的用线程加载,然后在另一个线程展示,而QPixmap不可以。

对这个硬件关联我没有这个概念,体会不深,但是在做图片多线程加载的时候,使用QPixmap吃了很多苦头。

1、QPixmap不可以使用在子线程中加载图片。

准确的说,使用在子线程加载图片也是可以的,但是调试的时候会报“segmentation fault”(段错误),原因可能就是刚才说的硬件关联等问题。

不管是使用引用初始化,还是用new,都是徒劳的。

如果忽略调试时的问题,正常跑起来也是没问题的。

2、用QImage代替QPixmap

历经尝试n多种方法,才发现用QImage代替QPixmap在线程中加载,可以解决上述“segmentation fault”。从线程中加载了图片之后,把QImage引用通过信号传递给主线程。

    QImage image;
    image.load(path);

    QThread::msleep(500);
    emit onImgLoadSignal(image);

3、如果QImage用指针将会删除不掉

一个想法,QImage想用指针来做,这样在接收到了之后,使用结束了,可以删除掉。但是实际上删除不掉:

(之所以想要手动删除,看第四点)

    QPixmap pixmap = QPixmap::fromImage(*
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值