通過繼承QSplashScreen類,得到CMySplashScreen類,然后在CMySplashScreen中定義QProgressBar變量,該變量以CMySplashScreen為父類,這樣就實現了帶進度條的啟動界面。
進度條加入后,需要控制進度條的值,為了讓進度條看起來更逼真,可以通過生成隨機數的方式,把隨機數當做進度條的值。此時,生成的隨機數必須是從小到大排列的,要不然進度條就不會從開端一步步走到終點,而是會出現走到一半后又回到開端等反常現象。如何生成隨機數可參考http://blog.csdn.net/caoshangpa/article/details/51036267
CMySplashScreen類的實現如下所示。
- #ifndef CMYSPLASHSCREEN_H
- #define CMYSPLASHSCREEN_H
- #include <QSplashScreen>
- #include <QPixmap>
- #include <QProgressBar>
- #include <QList>
- #include <QtGlobal>
- class CMySplashScreen: public QSplashScreen
- {
- Q_OBJECT
- public:
- CMySplashScreen(QPixmap& pixmap,int time);
- ~CMySplashScreen();
- private:
- //進度條
- QProgressBar *ProgressBar;
- //隨機數列表
- QList<int> numbersList;
- //啟動界面停留的時間
- int elapseTime;
- private:
- void setProgress();
- void generateAscendRandomNumber();
- private slots:
- void slotUpdateProgress();
- };
- #endif // CMYSPLASHSCREEN_H
- #include "cmysplashscreen.h"
- #include <QTime>
- #include <QTimer>
- CMySplashScreen::CMySplashScreen(QPixmap& pixmap,int time) :
- QSplashScreen(pixmap),
- elapseTime(time)
- {
- ProgressBar = new QProgressBar(this);
- //設置進度條的位置
- ProgressBar->setGeometry(0,pixmap.height()-50,pixmap.width(),30);
- //設置進度條的樣式
- ProgressBar->setStyleSheet("QProgressBar {color:black;font:30px;text-align:center; }QProgressBar::chunk {background-color: rgb(202, 165, 14);}");
- //設置進度條的樣式
- ProgressBar->setRange(0, 100);
- //設置進度條的當前進度
- ProgressBar->setValue(0);
- generateAscendRandomNumber();
- setProgress();
- }
- CMySplashScreen::~CMySplashScreen()
- {
- }
- void CMySplashScreen::setProgress()
- {
- int tempTime=elapseTime/100;
- for(int i=0;i<100;i++)
- {
- QTimer::singleShot(i*tempTime, this, SLOT(slotUpdateProgress()));
- }
- QTimer::singleShot(elapseTime, this, SLOT(close()));
- }
- void CMySplashScreen::slotUpdateProgress()
- {
- static int num=0;
- ProgressBar->setValue(numbersList[num]);
- num++;
- }
- void CMySplashScreen::generateAscendRandomNumber()
- {
- int i;
- qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
- //生成100個大小在[0,100]之間的隨機數
- for(i=0;i<100;i++)
- {
- numbersList.append(qrand()%101);
- }
- //遞增排序
- qSort(numbersList.begin(),numbersList.end());
- }
啟動界面效果如下所示。
源碼鏈接:見http://blog.csdn.net/caoshangpa/article/details/51037427的評論