QPixmap显示图片
一、利用QPixmap显示图片。
1.将以前的工程文件夹进行复制备份,我们这里将工程文件夹改名为painter05。(经常备份工程目录,是个很好的习惯)
2.在工程文件夹的debug文件夹中新建文件夹,我这里命名为images,用来存放要用的图片。我这里放了一张Linux.jpg的图片。
3.在Qt Creator中打开工程。(即打开工程文件夹中的.pro文件)
4.将dialog.cpp文件中的paintEvent()函数更改如下。
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load(“images/linux.jpg”);
painter.drawPixmap(0,0,100,100,pix);
}
这里新建QPixmap类对象,并为其添加图片,然后在以(0,0)点开始的宽和高都为100的矩形中显示该图片。你可以改变矩形的大小,看一下效果。最终程序运行效果如下。
二、利用更改坐标原点实现平移。
Qpainter类中的translate()函数实现坐标原点的改变,改变原点后,此点将会成为新的原点(0,0);
例如:
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load(“images/linux.jpg”);
painter.drawPixmap(0,0,100,100,pix);
painter.translate(100,100); //将(100,100)设为坐标原点
painter.drawPixmap(0,0,100,100,pix);
}
这里将(100,100)设置为了新的坐标原点,所以下面在(0,0)点贴图,就相当于在以前的(100,100)点贴图。效果如下。
三、实现图片的缩放。
我们可以使用QPixmap类中的scaled()函数来实现图片的放大和缩小。
例如:
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load(“images/linux.jpg”);
painter.drawPixmap(0,0,100,100,pix);
qreal width = pix.width(); //获得以前图片的宽和高
qreal height = pix.height();
pix = pix.scaled(width*2,height*2,Qt::KeepAspectRatio);
//将图片的宽和高都扩大两倍,并且在给定的矩形内保持宽高的比值
painter.drawPixmap(100,100,pix);
}
其中参数Qt::KeepAspectRatio,是图片缩放的方式。我们可以查看其帮助。将鼠标指针放到该代码上,当出现F1提示时,按下F1键,这时就可以查看其帮助了。当然我们也可以直接在帮助里查找该代码。
这是个枚举变量,这里有三个值,只看其图片就可大致明白,Qt::IgnoreAspectRatio是不保持图片的长宽比,Qt::KeepAspectRatio是在给定的矩形中保持长宽比,最后一个Qt::KeepAspectRatioByExpanding也是保持长宽比,但可能超出给定的矩形。这里给定的矩形是由我们显示图片时给定的参数决定的,例如painter.drawPixmap(0,0,100,100,pix);就是在以(0,0)点为起始点的宽和高都是100的矩形中。
程序运行效果如下。
四、实现图片的旋转。
旋转使用的是QPainter类的rotate()函数,它默认是以原点为中心进行旋转的。我们要改变旋转的中心,可以使用前面讲到的translate()函数完成。
例如:
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load(“images/linux.jpg”);
painter.translate(50,50); //让图片的中心作为旋转的中心
painter.rotate(90); //顺时针旋转90度
painter.translate(-50,-50); //使原点复原
painter.drawPixmap(0,0,100,100,pix);
}
这里必须先改变旋转中心,然后再旋转,然后再将原点复原,才能达到想要的效果。
运行程序,效果如下。
五、实现图片的扭曲。
实现图片的扭曲,是使用的QPainter类的shear(qreal sh,qreal sv)函数完成的。它有两个参数,前面的参数实现横行变形,后面的参数实现纵向变形。当它们的值为0时,表示不扭曲。
例如:
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load(“images/linux.jpg”);
painter.drawPixmap(0,0,100,100,pix);
painter.shear(0.5,0); //横向扭曲
painter.drawPixmap(100,0,100,100,pix);
}
效果如下:
其他扭曲效果:
painter.shear(0,0.5); //纵向扭曲
painter.shear(0.5,0.5); //横纵扭曲
图片形状的变化,其实就是利用坐标系的变化来实现的。
六、坐标系状态的保护。
我们可以先利用 save() 函数来保存坐标系现在的状态,然后进行变换操作,操作完之后,再用 restore() 函数将以前的坐标系状态恢复,其实就是一个入栈和出栈的操作。
例如:
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.save(); //保存坐标系状态
painter.translate(100,100);
painter.drawLine(0,0,50,50);
painter.restore(); //恢复以前的坐标系状态
painter.drawLine(0,0,50,50);
}
QPixmap显示图片相关推荐
- 利用QPixmap显示图片
利用QPixmap显示图片 我们来实现在窗口上显示图片,并将图片进行平移,缩放,旋转和扭曲.这里我是利用QPixmap类来实现图片显示的. 一.利用QPixmap显示图片. 1.将以前的工程文件夹进行 ...
- Qt 显示图片 放大 缩小 移动
本文章原创于www.yafeilinux.com 转载请注明出处. 现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲.这里我们是利用QPixmap类来实现图片显示的. 一.利 ...
- PyCharm pyqt5用label控件显示图片 QPixmap 串口通信指示灯
import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPixmap imp ...
- qt 关闭窗口的槽函数_勇哥的VC++应用框架学习之QT(1) 信号槽、按钮控件、opencv读取显示图片...
前言勇哥对于C语言,C++早些年有一些接触,这个系列贴子就记载一下C++应用框架的学习经验. 在写程序时,UI.基础类库.应用程序框架对于vc来讲,只能依靠MFC和QT了. 勇哥对MFC有很强的抵触, ...
- 【pyqt5】 读取numpy arrray 显示图片
目录 1.GUI界面(QT designer设计) 2.逻辑函数(回调等) 3.显示图片在label上 1)显示彩色图 彩色图显示色调不正常--opencv(BGR)QT(RGB)需要进行转换 2)显 ...
- Qt 实现QT控件中的QLabel显示图片并自适应显示
一.需求 实现QT控件中的QLabel显示图片,并自适应显示. 二.代码 QImage Image; Image.load(":/image/image/logo.jpg"); Q ...
- QT中循环显示图片和简单的显示图片
请关注我的github https://github.com/linqiaozhou 以下实例代码不久后将会上传到我的github 这是我最近一个项目中的部分代码 //以下是简单的在QT中显示图片的代 ...
- qlabel 显示图片后大小不变_图形编程:QT使用scrollarea显示图片的解决方案
需求: 在界面上点击"显示图片"按钮,会调用scrollarea窗口显示图片,窗口大小能根据图片大小自动调整,但是最大为1024*768,图片过大就要有滚动条来显示 IDE环境: ...
- Qt——P26 Label控件显示图片
先把图片资源添加到Qt ui界面创建label //利用lable 显示图片ui->label_image->setPixmap(QPixmap(":/picture/abc.p ...
最新文章
- Transformer 会接管人工智能?
- SVN迁移到Git的过程(+ 一些技巧)
- 为ubuntu添加多媒体以及flash等等常用包
- Git根据文件名字查询修改文件内容
- 【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题
- 三网融合情况下,实时语音通信技术的研究
- HTML5 兼容IE浏览器
- python 错误AttributeError: ‘dict_keys‘ object has no attribute ‘sort‘
- python读取数据库绘图_获取博客积分排名,存入数据库,读取数据进行绘图(python,selenium,matplotlib)...
- UVA 1411 - Ants(二分图完美匹配)
- HDU 4296 Buildings
- MacBook Air 是什么意思
- Node编写API接口,ajax实现增删改查
- html图表实现,用 Flotr2 实现的 HTML5 图表
- JavaScript学习笔记
- ubuntu /home/路径下.cache下清理
- AAAI 2022 论文列表
- 琵琶行 (白居易诗作)
- PMP 质量保证与质量控制的区别
- linux 文件转换ascii,关于linux:如何将文件从ASCII转换为UTF-8?