QT-简单使用加载效果

目录

简介

效果图

代码部分

资源


简介

    将加载效果放到了一个QWidget, 主窗体放到一个Qwidget, 这样加载数据的时候可以先隐藏不能操作的模块部分, 显示加载效果;

 

效果图

代码部分

    mainwindows.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H



#include <QMainWindow>

#include <QTimer>

#include <QMovie>



QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE



class MainWindow : public QMainWindow

{

    Q_OBJECT



public:

    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();



    void init();

    void showLoading(int second = 0, bool show=false);



private slots:

    void on_btnShowLoading_clicked();

    void start();

    void stop();

    void progressPlus();



private:

    Ui::MainWindow *ui;



    QMovie *m_movie;

    QTimer m_progressTimer;

    QTimer m_showTimer;

};

#endif // MAINWINDOW_H

 

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , m_movie(nullptr)
{
    ui->setupUi(this);
 
    init();
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::init()
{
    showLoading(); // 初始化隐藏加载界面
 
    m_showTimer.setSingleShot(true); // 设置加载界面的显示时长闹钟为单次模式
 
    connect(&m_showTimer, &QTimer::timeout, this, &MainWindow::stop); // 关联停止显示加载界面的信号和槽
    connect(&m_progressTimer, &QTimer::timeout, this, &MainWindow::progressPlus);
}
 
void MainWindow::showLoading(int second, bool show)
{
    if (show)
    {
        /* 初始化加载效果 和初始化进度条 */
        if (!m_movie)
        {
            QString gif = QString(":/images/6.gif");
            m_movie = new QMovie(gif);
            ui->lblLoading->setFixedSize(50, 50); // 大图则自己调节大小
            ui->lblLoading->setScaledContents(true);
            ui->lblLoading->setMovie(m_movie);
        }
        m_movie->start();
 
        ui->progressBar->setRange(0, 100);
        ui->progressBar->setValue(0);
 
        /* 加载时长 */
        int frequency = (second * 10) - 10; // second * 1000 / 100
        ui->mainWgt->hide();
        ui->LoadingWgt->show();
 
        m_progressTimer.start(frequency);
        m_showTimer.start(second * 1000);
    }
    else
    {
        if (m_movie)
            m_movie->stop();
 
        ui->mainWgt->show();
        ui->LoadingWgt->hide();
        m_progressTimer.stop();
        m_showTimer.stop();
    }
}
 
 
void MainWindow::on_btnShowLoading_clicked()
{
    start();
}
 
void MainWindow::start()
{
    showLoading(ui->sbLoadingTime->value(), true);
}
 
void MainWindow::stop()
{
    showLoading(ui->sbLoadingTime->value(), false);
}
 
void MainWindow::progressPlus()
{
    int value = ui->progressBar->value() + 1;
    ui->progressBar->setValue(value);
}

资源

https://download.csdn.net/download/halo_hsuh/12240612

Note:

      只是突然的一个想法, 希望可以碰撞更多的想法...

发布了16 篇原创文章 · 获赞 1 · 访问量 438

猜你喜欢

转载自blog.csdn.net/halo_hsuh/article/details/104790455