# PlayImage
## 记得一键三连哦
> - 一个使用简单的QPainter绘图事件实现图片播放器的简易demo
> - 支持图片切换
> - 支持多路更新,自己扩展即可
> - 支持幻灯片播放
> - PlayImage自定义控件支持复用,对外提供updateImage和updatePixmap接口,对传入的image和pixmap进行图片更新
> - PlayImage控件支持多线程调用
## 遗留问题
> - 图片分辨率太低
> - 测试次数少,及其简易的学习demo
## 项目代码
> [MyDemo文件夹下的PlayImage](https://github.com/wrk301608/QT-FFMmpeg)
## 项目警告
> - 注:博主本人学习过程的分享,引用他人的文章皆会标注原作者
> - 注:本人文章非盈利性质,若有侵权请联系我删除
> - 注:联系方式Q:2950319782
> - 注:博主本人很菜,文章基本是二次创作,大佬请忽略我的随笔
> - 注:我会一步步分享实现的细节,若仍有问题联系我
## 项目引用
> - [QPainter实现图片更新](https://blog.csdn.net/qq_43627907/article/details/124599535)
## 问题解决
> - [为什么要使用QImage加载图片,使用QPixmap绘制图片](https://www.cnblogs.com/linuxAndMcu/p/16587761.html)
## 开发环境
> - 系统:Win10
> - Qt:5.14.2
> - 编译器:qtcreator 4.11.1, minGW64
> - ffmpeg: 5.12
## 实现功能
> - 支持打开多种格式的图片
## 实现逻辑
> - ![image-20231126113656491](readme.assets/image-20231126113656491.png)
## 项目实现
### 项目结构
> - ![image-20231127145335230](readme.assets/image-20231127145335230.png)
### 项目思路
> - 要制作一款图像显示器的桌面软件,那么要先能把图片文件传入进来
> - 图片文件不可能是单一图像文件,也不可能是单个图片类型的文件,这里我们使用QFileDialog中的getOpenFileNames函数来获取图像文件路径的列表
> - 使用QStringList保存图像文件路径
> - 当加载出来图片的时候,页面默认显示第一张图片,只需要在选择图片的槽函数里,调用PlayImage的updatePixmap函数,把第一张图片的地址传入进去
> - 需要封装一个图片地址转QPixmap的函数
> - 下面来实现切换图片,需要维持一个图片索引值,默认从0开始
> - 先处理向后切换,为方便确定图片的索引,再维持一个图片总数值,再使用取余前后求图片索引值
> - 最后处理幻灯片自动向后播放的功能,再未点击开始播放前,停止播放应该不能被点击,设置一下属性,控制是否播放设置标志为Play,默认为true
> - 要延迟一会发送更新的信号,封装一个阻塞函数sleepMsec
从0到1,手把手带你只使用QPainter实现一个简易相册
需积分: 0 145 浏览量
更新于2023-12-07
收藏 63KB RAR 举报
在本文中,我们将深入探讨如何使用Qt库中的QPainter类来构建一个简易的电子相册。Qt是一个跨平台的应用程序开发框架,广泛用于C++编程,尤其适合图形用户界面(GUI)应用程序。QPainter是Qt提供的一种绘图系统,允许我们在窗口、图像、甚至打印机上进行复杂的图形绘制。
让我们从基础开始。`QPainter`类提供了基本的绘图操作,如画线、矩形、椭圆、文本等。在我们的相册项目中,`QPainter`将被用来显示和处理图片。要使用`QPainter`,我们首先需要创建一个`QPainter`对象,并将其关联到一个可以绘制的设备,比如`QPixmap`或`QImage`,它们代表了图像数据。
在"PlayImage"项目中,我们可能有一个主窗口类,继承自`QWidget`,并在其中放置一个`QLabel`控件,用于显示图片。`QLabel`可以与`QPixmap`结合,显示图像。当用户打开相册并选择图片时,我们可以加载图片到`QPixmap`,然后将其设置为`QLabel`的`pixmap`属性。
为了实现幻灯片播放,我们需要一个包含所有图片路径的列表,并使用一个计时器来控制图片的切换。`QTimer`类可以定时触发一个信号,我们可以连接这个信号到一个槽函数,用于切换图片。在槽函数中,我们可以更新当前显示的图片,并确保`QPainter`正确地重绘`QLabel`。
此外,上下切换图片的逻辑也非常重要。这可以通过修改当前图片索引来实现,增加或减少索引以浏览前一张或后一张图片。需要注意的是,要检查索引是否在列表范围内,避免越界。
在代码中,每张图片加载时,都可能需要使用`QImage`类的`load`方法,从文件路径加载图像,然后转换为`QPixmap`。因为`QPainter`可以直接在`QPixmap`上绘制,这样做的效率更高。
为了使用户体验更好,可以添加一些额外的功能,比如缩放、旋转和滑动浏览图片。这些可以通过监听鼠标和键盘事件来实现,使用`QPainter`的变换功能(如`translate`、`scale`和`rotate`)调整图像的显示。
总结一下,本项目的核心知识点包括:
1. 使用`QPainter`进行图像绘制和处理。
2. `QLabel`与`QPixmap`结合显示图片。
3. `QTimer`驱动的幻灯片播放功能。
4. 图片列表管理和索引操作。
5. 事件处理,如鼠标点击和键盘输入,以实现交互功能。
通过这个项目,你可以学习到Qt GUI编程的基础,以及如何利用`QPainter`进行图像操作。这是一个很好的起点,对于进一步的图形界面应用开发有着深远的意义。
KanHai8080
- 粉丝: 263
- 资源: 4
最新资源
- 嵌入式linux-final(一些源码).7z
- 嵌入式Linux课程设计选题指南-基于tiny210、Jetson Nano和Raspberry Pi的项目开发
- 嵌入式Linux下基于C语言实现的摄像头图像采集与远程传输解决方案
- Matching Anything By Segmenting Anything预训练权重
- 和豆包的对话_0109.txt
- Matching Anything By Segmenting Anything
- 嵌入式Linux环境下基于C/C++与Socket的HTTP客户端程序实现及数据处理
- transformer-6layer.png
- 网络安全领域常见十大漏洞扫描工具汇总及应用
- 补充说明3:嵌入式linux 加密数据socket通信.txt
- Socket网络编程实现多客户端数据上报与采集的技术实现
- 补充说明5:嵌入式Linux外接串口单片机的数据采集与存储.txt
- Linux系统环境下多主机间的高效文件传输机制与应用
- simulink二次调频AGC风电风机储能电动汽车水电火电二次调频,对比了有无储能电动汽车,水电火电调频,经典两区域系统二次调频 加入了风火水储资源 系统频率波形如下 经典两区域系统二次调频
- 发卡程序/会员/分站/三级分销/对接易/码/免签支付/完美运营
- 三电平ANPC实物实现以及仿真实现,拓扑交替反向叠波调制,采用SVPWM算法,中点平衡策略,可提供三电平SVPWM以及ANPC调制文档 功率3MW,电压1140V