QPixmap依赖于硬件,QImage不依赖于硬件。QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的。
当图片小的情况下,直接用QPixmap进行加载,画图时无所谓,当图片大的时候如果直接用QPixmap进行加载,会占很大的内存,一般一张几十K的图片,用QPixmap加载进来会放大很多倍,所以一般图片大的情况下,用QImage进行加载,然后转乘QPixmap用户绘制。QPixmap绘制效果是最好的。
setIconSize():设置图标大小,参数是QSize类型
dlg.size():获取图片的大小,返回的是QSize类型
QPixmap::scaled() 根据给定的尺寸来放大缩小QPixmap
QIcon 类代表图标,实现在 QtGui 共享库中。QIcon 对象可以认为是一系列图像的组合,每个图像代表窗口在某种状态下应该1显示的图标。
添加图像
下面的成员函数可以从图像文件中向 QIcon 对象添加图像:
其中各个参数的含义解释如下。
1)filename:文件名。
2)size:指定大小。
3)mode:指定使用模式,即窗口在何种状态下使用这个图像。
4)state:指定使用状态。
Mode 为 QIcon 类的成员类型,有以下取值。
1)QIcon::Normal:窗口为使能状态,但未激活。
2)QIcon::Disabled:窗口为禁用状态。
3)QIcon::Active:窗口为激活状态。
4)QIcon::Selected:窗口被选中。
当窗口的状态切换时,默认的图标绘制函数会自动根据窗口的状态重绘图标。如果窗口还有所谓的开关状态(比如一个按钮可以有按下和弹起两个状态),则还可以根据 state 参数来选择不同的图像。state 参数为 State 类型,这也是一个 QIcon 类的成员类型,它有以下取值。
QIcon::Off:窗口在关状态。
QIcon::On:窗口在开状态。
另外一个成员函数可以直接将 QPixmap 对象添加到 QIcon 对象中:
这里的 pixmap 参数是要添加的 QPixmap 对象,mode 参数和 state 参数的含义与 addFile 函数中相同。
获取图像
下面的成员函数可以获取 QIcon 对象中的图像
其中参数 size 是指定的大小,参数 mode 和 state 则是使用模式和状态。这个函数还有以下重载版本:
它们分别等价于以下的函数调用:
注意返回的图像大小可能比指定的小,但不会比指定的大。
判断 以下成员函数可以判断 QIcon 对象是否为空图像构成的图标:
问题:
当用同一个p,
即全局变量时,你加载图片1,显示图片1;再加载图片2,显示图片2;可当你再想变回图片一时,你再加载图片一,不好使了,变不回来了,还是显示图片二,你在加载个图片三,好使,再想变回图片二,不好使了。。。。。。
这是为神马呢???
原来,p.load()是将图片加载到缓冲区中:QPixmapCache,当你加载图片二是,图片一并没有被覆盖,此时缓冲区内有图片一和图片二,当你再次加载图片一时,以为缓冲区里应经有了,所以p.load(),直接返回true;但是图片仍是图片二,所以不能显示回图片一!
解决办法很简单,有三种办法:
一、 直接定义局部变量,这样每次都是新的缓冲区;
二、 当再次加载图片时,先将缓冲区清空, QPixmapCache::clear();然后再加载;
三、 在初始化函数里写:QPixmapCache::setCacheLimit(1);设置缓冲区内只能放一张图片,这样就会替换原来的