qpixmap需要什么动态库(QPixmapQIcon和QImage)

QPixmap依赖于硬件,QImage不依赖于硬件QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的当图片小的情况下,直接用QPixmap进行加载,画图时无所谓,当图片大的时候如果直接用QPixmap进行加载,会占很大的内存,一般一张几十K的图片,用QPixmap加载进来会放大很多倍,所以一般图片大的情况下,用QImage进行加载,然后转乘QPixmap用户绘制QPixmap绘制效果是最好的,接下来我们就来聊聊关于qpixmap需要什么动态库?以下内容大家不妨参考一二希望能帮到您!

qpixmap需要什么动态库(QPixmapQIcon和QImage)

qpixmap需要什么动态库

QPixmap依赖于硬件,QImage不依赖于硬件。QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的。当图片小的情况下,直接用QPixmap进行加载,画图时无所谓,当图片大的时候如果直接用QPixmap进行加载,会占很大的内存,一般一张几十K的图片,用QPixmap加载进来会放大很多倍,所以一般图片大的情况下,用QImage进行加载,然后转乘QPixmap用户绘制。QPixmap绘制效果是最好的。

QIcon testIcon("\\blankProject\\temp.bmp");->setIcon(testIcon);->setIcon(QIcon("\\blankProject\\temp.bmp"));->setIconSize(QSize(200,200));

setIconSize():设置图标大小,参数是QSize类型

QPixmap dlg(":/picture/dialog.png");->setFixedSize(dlg.size());->setPixmap(dlg);

dlg.size():获取图片的大小,返回的是QSize类型

QPixmap objPixmap;objPixmap.load(imgFile);//加载图片->setIcon(QIcon(objPixmap.scaled(QSize(100,100))));

QPixmap::scaled()根据给定的尺寸来放大缩小QPixmap

QIcon 类代表图标,实现在 QtGui 共享库中。QIcon 对象可以认为是一系列图像的组合,每个图像代表窗口在某种状态下应该1显示的图标。

QIcon(); // 构造一个空图像构成的图标 QIcon(const QPixmap &pixmap); // 从 Pixmap 对象构造函数 QIcon(const QString &filename); // 从图像文件构造图标

当从 QPixmap 对象构造图标时,系统会自动产生窗口不同状态下对应的图像,比如窗口在禁用状态下其图标为灰色。从文件构造图标时,文件并不是立刻加载,而是当图标要显示时才加载。

添加图像下面的成员函数可以从图像文件中向 QIcon 对象添加图像:

void addFile(const QString &filename, const QSize &size = QSize(), Mode mode = Normal, State state = Off);

其中各个参数的含义解释如下。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 对象中:

void addPixmap(const QPixmap &pixmap, Mode mode = Normal, State state = Off);

这里的 pixmap 参数是要添加的 QPixmap 对象,mode 参数和 state 参数的含义与 addFile 函数中相同。

获取图像下面的成员函数可以获取 QIcon 对象中的图像

QPixmap pixmap(const QSize &size, Mode mode = Normal, State state = Off) const;

其中参数 size 是指定的大小,参数 mode 和 state 则是使用模式和状态。这个函数还有以下重载版本:

QPixmap pixmap(int w, int h, Mode mode = Normal, State state = Off) const; QPixmap pixmap(int extent, Mode mode = Normal, State state = Off) const;

它们分别等价于以下的函数调用:注意返回的图像大小可能比指定的小,但不会比指定的大。

判断 以下成员函数可以判断 QIcon 对象是否为空图像构成的图标:

bool isNull() const; // 判断是否为空图像构成的图标

问题:

QPixmap p;p.load("1.png");label->setPixmap(p);p.load("2.png");label->setPixmap(p);p.load("1.png");label->setPixmap(p);

当用同一个p,即全局变量时,你加载图片1,显示图片1;再加载图片2,显示图片2;可当你再想变回图片一时,你再加载图片一,不好使了,变不回来了,还是显示图片二,你在加载个图片三,好使,再想变回图片二,不好使了。。。。。。

这是为神马呢???

原来,p.load()是将图片加载到缓冲区中:QPixmapCache,当你加载图片二是,图片一并没有被覆盖,此时缓冲区内有图片一和图片二,当你再次加载图片一时,以为缓冲区里应经有了,所以p.load(),直接返回true;但是图片仍是图片二,所以不能显示回图片一!

解决办法很简单,有三种办法:

一、 直接定义局部变量,这样每次都是新的缓冲区;

二、 当再次加载图片时,先将缓冲区清空, QPixmapCache::clear();然后再加载;

三、 在初始化函数里写:QPixmapCache::setCacheLimit(1);设置缓冲区内只能放一张图片,这样就会替换原来的

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页