目录
简介
将加载效果放到了一个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:
只是突然的一个想法, 希望可以碰撞更多的想法...