自学内容网 自学内容网

【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)!