QLabel概念:
在Qt中,QLabel类用于文本或图片(包括动图gif)、视频的显示,并不提供用户交互功能,
如果需要交互,比如响应鼠标事件,根据面向对象的里氏替换原则,子类必须能够替换它们的父类,同样Qt也支持该理念,所以可以新建一个类继承自QLabel,再重写鼠标事件,
子类此时通过继承,就具有了父类QLabel的功能,同时也具有了自己的事件,不过本文讨论的是Qt实现 QLabel显示文本与图片,不再引申其他。
一、在界面显示与获取文本:
ui->label->setText("hello qt"); //设置文本
ui->label->text(); //获取文本
通过setText()函数设置需要显示的文本,并且可以通过text()函数获取当前被设置的文本。
二、在界面显示图片:
显示图片通常有两种,一个是QPixmap类,一个是QImage类
下面看看二者主要的不同点:
1、QPixmap主要是用于绘图,针对屏幕显示而最佳化设计。而QImage主要是为图像I/O、图片访问和像素修改而设计的。
2、QPixmap依赖于所在的平台的绘图引擎,故例如反锯齿等一些效果在不同的平台上可能会有不同的显示效果,QImage使用Qt自身的绘图引擎,可在不同平台上具有相同的显示效果
3、目前的Qt会把QPixmap都存储在graphics memory中,QImage是存储在客户端的,是独立于硬件的。在 X11, Mac 以及 Symbian平台上,QPixmap 是存储在服务器端,而QImage则是存储在客户端,在Windows平台上,QPixmap和QImage都是存储在客户端,并不使用任何的GDI资源。
4、由于QImage是独立于硬件的,也是一种QPaintDevice,因此我们可以在另一个线程中对其进行绘制,而不需要在GUI线程中处理,使用这一方式可以很大幅度提高UI响应速度。
一、使用QImage在QLabel上显示图片。绝对路径方式
QImage *image=new QImage;
image->load("G:/Qt_coding/QLabelTest/1.png"); //绝对路径
//image->load("G:\\Qt_coding\\QLabelTest\\1.png"); //绝对路径的另一种方式
ui->label->setPixmap(QPixmap::fromImage(*image));
二、使用QPixmap显示图片。当前路径和相对路径方式
QPixmap *photo=new QPixmap;
photo->load("./test.png"); //表示当前路径 注意Qt的当前路径在exe的上一层目录 不是代码文件的文件夹 这里和C++不一样,
//photo->load("./../image/1.png"); //相对路径方式 ./可以忽略
ui->label->setPixmap(*photo);
//图片自适应label大小
ui->label->setScaledContents(true);
//修改label大小
ui->label->resize(200,300);
三、使用QMovie显示gif
movie.setFileName("G:/Qt_coding/QLabelTest/3.gif"); //已经在类中声明了movie
ui->label->setMovie(&movie);
movie.start();
如果使用QImage或者QPixmap显示gif,图片是动不了的,所以使用的是Qmovie类来实现动图的播放
这里通过start()函数来播放gif动画。可以通过stop()停止gir的播放,
或者使用setPaused(bool),设置为true用来暂停动画的播放,false恢复播放。