新浪博客

Qt初学(一)------关于Qt4加载QPixmap并显示的问题

2011-04-15 02:04阅读:
最近在学习使用Qt Creator的时候遇到有些情况,就是在加载QPixmap图像后在widget里边显示不出来,去网上找到一些解决方法,都没有说的很清楚~
先说加载QPixmap:加载的方法有两种(我所知道的),即通过绝对路径和相对路径
绝对路径:
QPixmap background;
background = QPixmap('D:/images/background');(或者'D:\\images\\background.bmp')
相对路径:
background = QPixmap('./images/background.bmp');
其中images文件夹的位置要注意,它和程序可执行文件所在的文件夹(Debug)是在同一目录下的,Qt工程被编译后会产生两个文件夹,例如ShowPic工程,一般会有ShowPic和ShowPic-build-desktop两个文件夹,源文件在ShowPic,而Debug则在另外一个ShowPic-build-desktop文件夹内,所以要加载的图片也要放在这里,可以不用文件夹,直接用QPixmap('background.bmp')加载。
加载说完了,再说下显示图片
方法一:在paintEvent函数哩调用painter.drawPixmap()函数显示位图,这种方法是按照图片的实际尺寸来显示的,效果如下:

方法二:利用QPalette palette
调用palette.setBrush(frame->backgroundRole(),QBrush(pixmap));再用frame->setPalette(palette)把画板加到主界面,这样显示的图形可以在整个界面上一张接一张地铺开,效果如下:

方法三:
用一幅图片填充满整个窗口,相当于MFC里边的StretchBlt()函数
frame->setStyleSheet('QFrame#myframe{border-image:url(background.bmp)}' );
其运行效果如下:

以上是显示图片的大致过程
另外:
QPixmap的具体实现是依赖于系统的。在Symbian系统上QPixmap是被存放在Server端的。目前的Qt会把QPixmap都存储在graphics memory中,这明显是依赖硬件的。因此我们对QPixmap的使用需要格外注意,要显示的图片不能太大,否则完全解码后graphics memory可能会因为没有空间儿显示不出来。其原因就是由于设计之初QPixmap就是用来加速显示的,例如我们在paint的时候用QPixmap就会比用其他类的效果好许多。
和QPixmap 不同,QImage是独立于硬件的,它可以同时被另一个线程访问。QImage是存储在客户端的,对QImage的使用是非常方便和安全的。 又由于 QImage 也是一种QPaintDevice,因此我们可以在另一个线程中对其进行绘制,而不需要在GUI 线程中处理,使用这一方式可以很大幅度提高UI响应速度。
因此当图片较大时,我们可以先通过QImage将图片加载进来,然后把图片缩放成需要的尺寸,最后转换成QPixmap 进行显示。

我的更多文章

下载客户端阅读体验更佳

APP专享