当前位置: 首页 > news >正文

qt QMovie详解

1、概述

QMovie 是 Qt 框架中用于处理动画文件的类。它支持多种动画格式,包括 GIF 和一些常见的视频格式(尽管对视频格式的支持依赖于底层平台)。QMovie 类主要用于在 QLabel 或 QGraphicsView 等控件中显示动画。通过加载动画文件,QMovie 可以控制动画的播放、暂停、停止以及获取当前帧图像等操作。

2、重要方法

  • QMovie(const QString &fileName, QObject parent = nullptr):构造函数,通过文件名加载动画。
  • bool isValid() const:检查动画文件是否有效。
  • void start():开始播放动画。
  • void stop():停止播放动画。
  • void setPaused(bool paused):暂停或恢复动画播放。
  • bool isPaused() const:检查动画是否处于暂停状态。
  • QImage currentFrame() const:获取当前帧的 QImage 对象。
  • int frameCount() const:获取动画的总帧数。
  • int nextFrameDelay() const:获取下一帧的延迟时间(毫秒)。
  • void setCacheMode(CacheMode mode):设置动画帧的缓存模式,以优化性能。
  • void jumpToFrame(int frameNumber):跳转到指定帧。
  • void setSpeed(int percent):设置动画播放的速度,单位为百分比(默认100%)
  • void setLoopCount(int count):设置动画的循环播放次数。

3、常用信号

以下是QMovie类中一些常用的信号及其简要介绍:

  • void started():当动画开始播放时发出信号,
  • void finished():当动画播放完成时发出信号
  • void frameChanged(int frameNumber):当动画帧发生变化时发出信号
  • void stateChanged(QMovie::MovieState state):当动画状态发生变化时发出信号。
  • void error(QImageReader::ImageReaderError error):当动画播放发生错误时发出信号。

4、缓存模式

QMovie::CacheMode 枚举定义了动画的缓存模式:

  • QMovie::CacheNone:不缓存帧,实时解码。
  • QMovie::CacheAll:缓存所有帧。

5、动画状态

QMovie::Moviestate枚举定义了动画的状态:

  • QMovie::NotRunning:动画未在运行。
  • QMovie::Paused:动画暂停。
  • QMovie::Running:动画正在运行。
#include <QApplication>
#include <QLabel>
#include <QMovie>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建一个主窗口QWidget window;window.setWindowTitle("QMovie Example");// 创建一个 QVBoxLayoutQVBoxLayout *layout = new QVBoxLayout;// 创建一个 QLabelQLabel *label = new QLabel;// 创建一个 QMovie 对象并加载 GIF 文件QMovie *movie = new QMovie(":/path/to/your/animation.gif");// 将 QMovie 对象设置给 QLabellabel->setMovie(movie);// 将 QLabel 添加到布局中layout->addWidget(label);// 将布局设置给窗口window.setLayout(layout);// 开始播放动画movie->start();// 显示窗口window.show();return app.exec();
}

觉得有帮助的话,打赏一下呗。。

           


http://www.mrgr.cn/news/67405.html

相关文章:

  • go网络编程
  • 数据转换 | Matlab基于SP符号递归图(Symbolic recurrence plots)一维数据转二维图像方法
  • 迅为RK3588开发板Android多屏显示之多屏同显和多屏异显
  • C语言扫雷小游戏
  • Golang | Leetcode Golang题解之第538题把二叉搜索树转换为累加树
  • Hive SQL中判断内容包含情况的全面指南
  • 【Windows】轻松搞定网络问题!掌握`ipconfig`与`ping`命令的奥秘
  • 解锁炎症和肿瘤免疫治疗新靶点:TREM1&TREM2
  • 前端UniApp面试题及参考答案(100道题)
  • Java八股文
  • Python数据分析NumPy和pandas(二十五、数据整理--连接、合并和重塑 之二:数据连接合并操作)
  • 云数据中心基础环境-详细设计方案(364页WORD)
  • 什么是方法区(线程共享)?
  • 数据分析:16s扩增子网络分析之SparCC
  • Power Pivot、Power BI 和 SQL Server Analysis Services 的公式语言:DAX(数据分析表达式)
  • 【NOIP提高组】引水入城
  • GB/T 28046.4-2011 道路车辆 电气及电子设备的环境条件和试验 第4部分:气候负荷(2)
  • 个人测评之罗技G502X
  • 【算法】【优选算法】滑动窗口(下)
  • Linux系统I/O调优实例
  • Java+控制台 商城销售系统
  • C++开发基础之使用librabbitmq库实现RabbitMQ消息队列通信
  • MySQL:表的增删改查(进阶)
  • 修改云服务器远程默认端口
  • Docker学习: Docker介绍和安装以及常用命令
  • Stable Diffusion Web UI - ControlNet 景深 Depth