以前打红警的时候进入游戏界面会有一个启动界面,比如美国是有伞兵,英国有狙击手,韩国有黑鹰战机的一些介绍,这些就是启动界面,就是由QSplashScreen这个类来实现的。
QSplashScreen 是 Qt 框架中的一个类,用于在应用程序启动时显示一个启动画面。这个启动画面通常用于展示应用程序的图标、名称或者加载进度,同时可以给用户一个视觉反馈,表明程序正在初始化。 QSplashScreen 提供了一些基本的功能,例如显示图像、动画和文本信息。它也可以设置显示时间,以及在应用程序的主窗口显示之前自动隐藏。
#ifndef STARTINTERFACE_H
#define STARTINTERFACE_H
#include <QSplashScreen>
#include <QProgressBar>
#include <QPixmap>
#include <QMouseEvent>
#include <thread>
class StartInterface : public QSplashScreen
{
Q_OBJECT
public:
StartInterface(const QPixmap &pixmap);
~StartInterface();
void SetProgress (int value);
void ShowStarted (void);
private:
QProgressBar *ProgressBar=nullptr;
private slots:
void progressChanged (int);
};
#endif // STARTINTERFACE_H
cpp
#include "startinterface.h"
StartInterface::StartInterface(const QPixmap &pixmap):QSplashScreen(pixmap)
{
ProgressBar = new QProgressBar (this);
ProgressBar->setGeometry(0, pixmap.height() - 50, pixmap.width(), 30);
ProgressBar->setRange (0, 100);
ProgressBar->setValue (0);
connect(ProgressBar, SIGNAL(valueChanged(int)), this, SLOT(progressChanged(int)));
QFont font;
font.setPointSize ( 16 );
ProgressBar->setFont (font);
ProgressBar->setStyleSheet("QProgressBar{ \
font:9pt; \
border-radius:5px; \
text-align:center; \
border:1px solid #E8EDF2; \
background-color: rgb(255, 255, 255); \
border-color: rgb(180, 180, 180); \
} \
QProgressBar:chunk{ \
border-radius:5px; \
background-color:#1ABC9C; \
}"
);
}
StartInterface::~StartInterface()
{
}
void StartInterface::SetProgress(int value)
{
ProgressBar->setValue(value);
}
void StartInterface::ShowStarted()
{
show();
//暂停当前线程
for (int i = 0; i <= 100; ++i) {
std::this_thread::sleep_for(std::chrono::milliseconds(10));
SetProgress(i);
}
}
void StartInterface::progressChanged(int)
{
repaint();
}
cpp
#include "widget.h"
#include <QApplication>
#include "startinterface.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StartInterface *splash = new StartInterface(QPixmap("E:/1.png"));
splash->ShowStarted();
a.processEvents();
Widget w;
w.show();
return a.exec();
}
效果: