實現(xiàn)軟件啟動界面,用到QSplashScreen
類。
效果
啟動界面
描述
QSplashScreen
小部件提供了一個可以在應(yīng)用程序啟動期間顯示的啟動畫面。
啟動畫面通常是在應(yīng)用程序啟動時顯示的小部件。啟動畫面通常用于啟動時間較長的應(yīng)用程序(例如需要花費一些時間來建立連接的數(shù)據(jù)庫或網(wǎng)絡(luò)應(yīng)用程序),以向用戶提供應(yīng)用程序正在加載的反饋信息。
啟動畫面會出現(xiàn)在屏幕的中央。如果希望將啟動畫面保持在所有其他窗口之上,在啟動畫面的窗口標志中添加Qt::WindowStaysOnTopHint
可能會很有用。
一些X11窗口管理器不支持"窗口保持在頂部"標志。解決方法是設(shè)置一個定時器,定期對啟動畫面調(diào)用raise()
函數(shù),以模擬"窗口保持在頂部"的效果。
最常見的用法是在顯示主窗口之前顯示啟動畫面。
下面的代碼片段演示了此用法,其中顯示了一個啟動畫面并在顯示應(yīng)用程序的主窗口前執(zhí)行一些初始化任務(wù):
main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPixmap pixmap(":/splash.png");
QSplashScreen splash(pixmap);
splash.show();
app.processEvents();
...
QMainWindow window;
window.show();
splash.finish(&window);
return app.exec();
}
用戶可以通過鼠標單擊來隱藏啟動畫面。由于啟動畫面通常顯示在事件循環(huán)開始運行之前,因此需要定期調(diào)用QApplication::processEvents()來接收鼠標點擊事件。
有時候需要更新啟動畫面上的消息例如,在應(yīng)用程序啟動期間通知已經(jīng)建立的連接或加載的模塊:
QPixmap pixmap(":/splash.png");
QSplashScreen *splash = new QSScreen(pixmap);
splash->show();
... // 加載一些項
splash->showMessage("已加載模塊");
qApp->processEvents();
... // 建立連接
splash->showMessage("正在建立連接");
qApp->processEvents();
QSplashScreen
支持使用showMessage()
函數(shù)進行這樣的操作。如果希望進行自定義繪制,可以使用pixmap()
函數(shù)獲取啟動畫面使用的位圖的指針?;蛘?,可以子類化QSplashScreen
并重新實現(xiàn)drawContents()
函數(shù)。
常用函數(shù)
-
構(gòu)造函數(shù):
-
QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())
:使用給定的位圖和窗口標志構(gòu)造一個QSplashScreen對象。
-
-
顯示和隱藏:
-
void show()
:顯示啟動畫面。 -
void finish(QWidget *mainWindow)
:隱藏啟動畫面,并將其關(guān)聯(lián)到指定的主窗口。在調(diào)用此函數(shù)之前,通常會在顯示主窗口前執(zhí)行一些初始化任務(wù)。 -
void clearMessage()
:清除啟動畫面上顯示的消息。
-
-
位圖相關(guān):
-
void setPixmap(const QPixmap &pixmap)
:設(shè)置啟動畫面使用的位圖。 -
const QPixmap *pixmap() const
:返回啟動畫面使用的位圖的指針。
-
-
消息顯示:
-
void showMessage(const QString &message, int alignment = Qt::AlignBottom | Qt::AlignCenter, const QColor &color = Qt::black)
:在啟動畫面上顯示消息??梢栽O(shè)置消息的對齊方式和顏色。
-
-
其他:
-
void raise()
:將啟動畫面置于頂層。 -
bool isFullScreen() const
:判斷啟動畫面是否為全屏模式。 -
void setEnabled(bool enabled)
:設(shè)置啟動畫面是否可用。 -
void setAutoFillBackground(bool enabled)
:設(shè)置是否自動填充啟動畫面的背景。
-
子類化示例
.h
#ifndef SCREEN_H
#define SCREEN_H
#include <QWidget>
#include <QSplashScreen>
namespace Ui {
class C_Screen;
}
class C_Screen : public QSplashScreen
{
Q_OBJECT
public:
explicit C_Screen(QWidget *parent = nullptr);
~C_Screen();
private:
Ui::C_Screen *ui;
};
#endif // SCREEN_H
.cpp
文章來源:http://www.zghlxwxcb.cn/news/detail-729554.html
#include "Screen.h"
#include "ui_Screen.h"
#include <QPixmap>
#include <QFont>
C_Screen::C_Screen(QWidget *parent) :
QSplashScreen(parent),
ui(new Ui::C_Screen)
{
ui->setupUi(this);
QString strScreen = ":/images/screen1.png";
QFont font = this->font();
font.setPixelSize(23);
setFont(font);
QPixmap loadingPix(strScreen);
setPixmap(loadingPix);
}
C_Screen::~C_Screen()
{
delete ui;
}
在.main調(diào)用
文章來源地址http://www.zghlxwxcb.cn/news/detail-729554.html
C_Screen screen;
screen.show();
screen.showMessage("程序正在加載......", Qt::AlignTop|Qt::AlignRight, Qt::red);
QDateTime time = QDateTime::currentDateTime();
QDateTime currentTime = QDateTime::currentDateTime(); //記錄當前時間
// 可以添加處理業(yè)務(wù)
while (time.msecsTo(currentTime) <= 1000) //1000為需要延時的毫秒數(shù)
{
currentTime = QDateTime::currentDateTime();
}
for(int i = 0; i < 3; ++i)
{
screen.showMessage(QString("請稍等%1......").arg(3-i), Qt::AlignTop|Qt::AlignRight, Qt::red);
time = currentTime;
while (time.msecsTo(currentTime) <= 1000) //1000為需要延時的毫秒數(shù)
{
currentTime = QDateTime::currentDateTime();
}
}
到了這里,關(guān)于Qt 實現(xiàn)軟件啟動界面動畫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!