【QT常用技术讲解】使用QMovie+QLabel播放gif动态图片,实现“正在加载”功能(源代码在资源中下载)
前言
界面在实现事件等待时,通过会显示一个转圈圈的动态图片,表示“正在加载”,事件完成之后关闭图片,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();
}
}
原文地址:https://blog.csdn.net/liangyuna8787/article/details/144437621
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!