# 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 135 浏览量
更新于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`进行图像操作。这是一个很好的起点,对于进一步的图形界面应用开发有着深远的意义。
![avatar](https://profile-avatar.csdnimg.cn/cbe0afde44944e6995f7d9a87be2b9f2_kanhai8080.jpg!1)
KanHai8080
- 粉丝: 263
- 资源: 4
最新资源
- Golang_Puzzlers-春节主题资源
- AndBase-javaEE框架项目资源
- 智慧园区管理系统-活动资源
- XLang-汇编语言资源
- 基于数据预处理与PSO-SVM优化的风功率预测及其聚类分析-一种提高预测准确性的方法,基于数据预处理与PSO-SVM优化的风功率预测及聚类分析-一种提高可再生能源预测准确性的方法,基于数据预处理和
- 风光储系统并网Simulink仿真建模深度分析:从原理到实践的应用研究,风光储系统并网技术:基于Simulink仿真建模的深度分析与研究,风光储系统并网simulink仿真建模分析 ,风光储系统; 并
- 基于自抗扰控制的幅频特性曲线研究:传函推导与PID等效在跟踪和抗扰曲线上的应用分析,基于自抗扰控制的幅频特性曲线研究:PID等效性及其在跟踪和抗扰曲线上的应用分析,自抗扰控制,幅频特性曲线,传函推导
- 小程序商城源码-Java-C语言资源
- 基于FPGA的高效OFDM调制解调技术实现,Verilog代码编写及FFT与IFFT的双重验证:包括详细的testbench操作流程及程序录像,基于FPGA的OFDM调制解调Verilog实现:包含I
- 基于FPGA的256点FFT算法Verilog实现与程序操作指南,包含Testbench及无IP核应用案例的演示录像,基于FPGA实现的256点FFT傅里叶变换算法与Verilog代码优化方案含测试与
- 基于两阶段鲁棒优化的微电网经济调度策略:应对分布式电源与负荷不确定性的高效调度方案,基于分布式电源与负荷不确定性的微电网两阶段鲁棒优化经济调度策略,微电网两阶段鲁棒优化经济调度方法 参考文献:微电网两
- 通过场分布分析光子晶体的色散特性研究,光子晶体色散研究:场分布与光子能量关系解析,通过场分布得到光子晶体的色散 ,场分布; 光子晶体; 色散,光子晶体色散分析:场分布的揭示与应用
- 小程序商城源码-Java-C++资源
- IOTGate-Java资源
- Aestate-Python资源
- nats.swift-Swift资源