class SplashScreen : public QSplashScreen
{
Q_OBJECT
public:
explicit SplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags());
~SplashScreen();
void getNumbersList();
void setPixmap(const QPixmap &pixmap);
static bool updateProgress();
static void setProgressBarVisible(bool isVisible);
static bool m_showProgressBar;
static QProgressBar *m_progressBar;
static QLabel *m_versionLabel;
static QLabel *m_copyrightLabel;
static QList<int> m_numbersList;
static int m_index;
static QString m_progressBarQSS;
};
SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f)
{
m_index = 0;
m_progressBarQSS = "QProgressBar {border: none; background: transparent;}"
"QProgressBar::chunk {background: #FFFFFF;"
"border-top-left-radius: 0px;"
"border-top-right-radius: %1px;"
"border-bottom-right-radius: %2px;"
"border-bottom-left-radius: %3px;}";
getNumbersList();
}
SplashScreen::~SplashScreen()
{
if (m_progressBar) {
delete m_progressBar;
m_progressBar = Q_NULLPTR;
}
if (m_versionLabel) {
delete m_versionLabel;
m_versionLabel = Q_NULLPTR;
}
if (m_copyrightLabel) {
delete m_copyrightLabel;
m_copyrightLabel = Q_NULLPTR;
}
}
void SplashScreen::getNumbersList()
{
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
for(int i = 0; i <= 20; i++)
{
m_numbersList.append(i * 5 + qrand() % 5);
}
m_numbersList[0] = 5;
m_numbersList[m_numbersList.count() - 1] = 100;
}
void SplashScreen::setPixmap(const QPixmap &pixmap)
{
if (m_showProgressBar) {
qreal rate = UnitUtil::dpiScale96();
int height = 8 * rate;
qreal pr = UnitUtil::pixelRatio();
m_progressBar = new QProgressBar(this);
m_progressBar->setTextVisible(false);
m_progressBar->setGeometry(0, pixmap.height() / pr - height, pixmap.width() / pr, height);
m_progressBar->setRange(0, 100);
m_progressBar->setValue(0);
if (height % 2 == 1) {
height--;
}
int radius = height / 2;
m_progressBar->setStyleSheet(m_progressBarQSS.arg(0).arg(0).arg(radius - 1 * rate));
m_progressBarQSS = m_progressBarQSS.arg(0).arg(radius - 1 * rate).arg(radius - 1 * rate);
QString labelQSS = "QLabel{background: transparent; color: #FFFFFF; border: none;}";
m_versionLabel = new QLabel(this);
m_versionLabel->setStyleSheet(labelQSS);
m_versionLabel->setFont(font);
m_versionLabel->setText(tr("Version: ") + EDVERSION);
m_copyrightLabel = new QLabel(this);
m_copyrightLabel->setStyleSheet(labelQSS);
m_copyrightLabel->setFont(font);
m_copyrightLabel->setText(QString("<font>%1</font>").arg(tr("Copyright © %1 EdrawSoft. All rights reserved.").arg(QDate::currentDate().year())));
m_versionLabel->move(72 * rate, 232 * rate);
m_copyrightLabel->move(72 * rate, 256 * rate);
}
QSplashScreen::setPixmap(pixmap);
}
bool SplashScreen::updateProgress()
{
if (!m_showProgressBar)
return false;
if (m_index >= 0 && m_index < m_numbersList.count()) {
if (m_progressBar) {
if (m_numbersList[m_index] == 100) {
m_progressBar->setStyleSheet(m_progressBarQSS);
}
m_progressBar->setValue(m_numbersList[m_index]);
m_progressBar->repaint();
m_index++;
return true;
} else {
if (m_progressBar) {
m_progressBar->setStyleSheet(m_progressBarQSS);
}
}
return false;
}
void SplashScreen::setProgressBarVisible(bool isVisible)
{
m_showProgressBar = isVisible;
if (!m_showProgressBar) {
if (m_progressBar) {
delete m_progressBar;
m_progressBar = Q_NULLPTR;
}
if (m_versionLabel) {
delete m_versionLabel;
m_versionLabel = Q_NULLPTR;
}
if (m_copyrightLabel) {
delete m_copyrightLabel;
m_copyrightLabel = Q_NULLPTR;
}
}
}
原文:https://www.cnblogs.com/wickhamchen/p/14350081.html