【QT常用技术讲解】使用QMovie+QLabel播放gif动态图片,实现“正在加载”功能(源代码在资源中下载)

server/2024/12/18 0:14:37/

前言

        界面在实现事件等待时,通过会显示一个转圈圈的动态图片,表示“正在加载”,事件完成之后关闭图片,QT中可以使用QMovie+QLabel完成gif动态图片的播放及关闭的效果。

效果图

功能讲解

1、加载动画

void MainWindow::addloadgif(const QString& gifpath,const QString& showmsg){QSize size = this->size();  //获取MainWindow的长宽高int rwidth = size.width();int rheight = size.height();int gif_width = 120;int gif_height = gif_width;// 创建一个标签来显示加载动画m_loadingLabel = new QLabel(this);//setGeometry(int x, int y, int width, int height) x:x坐标;y:y坐标;width:宽度;height:高度m_loadingLabel->setGeometry((rwidth-m_loadingLabel->width())/2, ((rheight - m_loadingLabel->height()) / 2)-60,gif_width,gif_height);m_msgLabel = new QLabel(showmsg,this);m_msgLabel->setAlignment(Qt::AlignCenter); // 设置文本居中// 设置字体大小QFont font = m_msgLabel->font();font.setPointSize(12); // 设置为12号字体,根据需要可以调整大小m_msgLabel->setFont(font);m_msgLabel->setGeometry((rwidth-m_msgLabel->width())/2,((rheight - m_msgLabel->height()) / 2)+60,gif_width,40);// 创建一个QMovie对象来加载GIF动画m_movie = new QMovie(gifpath); // 替换为你的GIF路径m_loadingLabel->setScaledContents(true);m_loadingLabel->setFixedSize(gif_width,gif_height);m_loadingLabel->setMovie(m_movie);m_movie->start();stopLoading();
}

图片和文字各自占用一个label,为了让label在MainWindow中间显示,通过QSize size = this->size(); 获取MainWindow的宽和高,并通过setGeometry设置具体的位置

//把两个label的位置调整到正中间
m_loadingLabel->setGeometry((rwidth-m_loadingLabel->width())/2, ((rheight - m_loadingLabel->height()) / 2)-60,gif_width,gif_height);
m_msgLabel->setGeometry((rwidth-m_msgLabel->width())/2,((rheight - m_msgLabel->height()) / 2)+60,gif_width,40);

通过QMovie加载动画,m_movie->start();是开始播放动画

 // 创建一个QMovie对象来加载GIF动画m_movie = new QMovie(gifpath); // 替换为你的GIF路径m_loadingLabel->setScaledContents(true);m_loadingLabel->setFixedSize(gif_width,gif_height);m_loadingLabel->setMovie(m_movie);m_movie->start();

2、按钮功能打开、关闭动画

在初始化函数中,创建按钮,以及调用addloadgif加载动画,按钮会触发simulateLoading槽函数

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{//ui->setupUi(this);// 设置主窗口setFixedSize(600, 400);// 创建一个布局来管理标签位置m_layout = new QVBoxLayout;// 添加一个按钮,用于模拟其他操作m_LoadingButton = new QPushButton("关闭动画", this);m_layout->addWidget(m_LoadingButton);connect(m_LoadingButton, &QPushButton::clicked, this, &MainWindow::simulateLoading);addloadgif(":/index/img/load.gif","正在处理...");
}
void MainWindow::stopLoading() {// 停止动画//m_movie->stop();//把标签隐藏起来m_loadingLabel->hide();m_msgLabel->hide();m_LoadingButton->setText("开启动画");m_openstatus = false;
}
void MainWindow::showLoading() {////m_movie->start();m_loadingLabel->show();m_msgLabel->show();m_LoadingButton->setText("关闭动画");m_openstatus = true;
}
void MainWindow::simulateLoading() {if(m_openstatus){stopLoading();}else{showLoading();}
}


http://www.ppmy.cn/server/151033.html

相关文章

vue3中的v-model如何自定义修饰符

子组件封装 <script setup lang"ts"> import { defineModel } from "vue"const firstName defineModel("first-name") // 自定义组件修饰符&#xff0c;首字母大写 const [lastName, lastNameModifiers] defineModel("last-name&q…

3D 生成重建036-HyperDiffusion直接生成nerf几何

3D 生成重建036-HyperDiffusion直接生成nerf几何 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 作者提出了一种名为HyperDiffusion的新型方法&#xff0c;用于直接生成隐式神经辐射场&#xff0c;方法是预测其权重空间中的参数。与以往需要对神经网络的单个实例进行优…

FedAdam算法:供给方信用,数据质量;更新一致性

FedAdam算法:供给方信用,数据质量;更新一致性 FedAdam算法概述 FedAdam是一种联邦学习(Federated Learning)算法。联邦学习是一种机器学习技术,它允许在多个设备或数据中心(称为客户端)上训练模型,而无需将数据集中到一个中央服务器,从而保护数据隐私。FedAdam主要用于…

Python+OpenCV系列:图像的运算

文章目录 PythonOpenCV系列&#xff1a;图像的加权和、覆盖1. 图像加权和&#xff08;加权融合&#xff09;2. 图像覆盖&#xff08;区域叠加&#xff09;3. 应用场景4. 总结 PythonOpenCV系列&#xff1a;图像的加权和、覆盖 在图像处理中&#xff0c;图像的加权和与覆盖是两…

Lumos学习王佩丰Excel第二十一讲:经典Excel动态图表实现原理

一、动态图表实现原理 1、理解图表中的数据系列 在Excel图表中&#xff0c;系列指的是图表中的数据集合&#xff0c;它通常代表着一个数据源。每个系列都可以包含多个数据点&#xff0c;这些数据点在图表中以特定的形式展现&#xff0c;如柱状图中的柱子&#xff0c;折线图中…

《网络安全编程基础》之Socket编程

我的代码 server.c // server.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include <Winsock2.h> #pragma comment(lib,"ws2_32.lib") //添加静态链接库文件 void main(int argc,char* argv[]) {WSADATA …

Scala特色功能点

这里写目录标题 引言1. 函数作为一等公民2. 不需要分号3. 模式匹配4. 不可变性5. 伴生对象和伴生类6. 隐式参数和隐式转换7. 高阶函数8. Case 类9. for-comprehensions10. 类型推断11. 结构化并发12. 选项类型13. 伴生对象和伴生类14. 结构类型15. 隐式转换16. 组合模式17. 反模…

Nginx WebDAV扩展模块安装与配置完全指南

Nginx WebDAV扩展模块安装与配置完全指南 nginx-dav-ext-module nginx WebDAV PROPFIND,OPTIONS,LOCK,UNLOCK support [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-dav-ext-module 项目基础介绍 Nginx WebDAV扩展模块(nginx-dav-ext-module)是由a…