启动界面加进度条 MySplashScreen.h
#ifndef MYSPLASHSCREEN_H
#define MYSPLASHSCREEN_H
#include <QObject>
#include <QSplashScreen>
#include <QProgressBar>
class MySplashScreen : public QSplashScreen
{
Q_OBJECT
private:
QProgressBar *progressBar;
public:
MySplashScreen(const QPixmap& pixmap);
~MySplashScreen();
public slots:
void setProgress(int value);// 外部改变进度
private slots:
void progressChanged(int);
};
#endif // MYSPLASHSCREEN_H
MySplashScreen.cpp
#include "mysplashscreen.h"
MySplashScreen::MySplashScreen(const QPixmap& pixmap):QSplashScreen (pixmap)
{
progressBar = new QProgressBar(this);
progressBar->setGeometry(0,576-32,1024,32);
progressBar->setRange(0, 100);
progressBar->setValue(0);
connect(progressBar, SIGNAL(valueChanged(int)),
this, SLOT(progressChanged(int))); //值改变时,立刻repaint
QFont font;
font.setPointSize(32);
progressBar->setFont(font); // 设置进度条里面的字体
}
MySplashScreen::~MySplashScreen()
{}
void MySplashScreen::setProgress(int value)
{
progressBar->setValue(value);
}
void MySplashScreen::progressChanged(int)
{
repaint();
}
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MySplashScreen;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(MySplashScreen* sp,QWidget *parent = nullptr);
~MainWindow();
signals:
void setProgress(int value);
private:
Ui::MainWindow *ui;
MySplashScreen* splashScreen;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
#include "mysplashscreen.h"
MainWindow::MainWindow(MySplashScreen* sp,QWidget *parent) :
splashScreen(sp),
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(this,&MainWindow::setProgress,splashScreen,&MySplashScreen::setProgress);
emit setProgress(30);
QThread::sleep(2);
emit setProgress(60);
QThread::sleep(2);
emit setProgress(80);
QThread::sleep(2);
emit setProgress(90);
QThread::sleep(2);
emit setProgress(99);
}
MainWindow::~MainWindow()
{
delete ui;
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QSplashScreen>
#include <QThread>
#include "mysplashscreen.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MySplashScreen *splash = new MySplashScreen(QPixmap(":/images/1.png"));
splash->show();
splash->setGeometry(128,72,1024,576);
a.processEvents();
MainWindow w(splash);
w.show();
splash->finish(&w);
delete splash;
return a.exec();
}
运行效果: