自己学做网站,微网站 布局,集成电路行业人才,移动端原型效果
开场动画效果如下#xff1a; 开场动画 介绍
QSplashScreen小部件提供了一个启动屏幕#xff0c;可以在应用程序启动期间显示。
启动屏幕是一个小部件#xff0c;通常在应用程序启动时显示。启动屏幕通常用于启动时间较长的应用程序(例如需要花费时间建立连接的数据…效果
开场动画效果如下 开场动画 介绍
QSplashScreen小部件提供了一个启动屏幕可以在应用程序启动期间显示。
启动屏幕是一个小部件通常在应用程序启动时显示。启动屏幕通常用于启动时间较长的应用程序(例如需要花费时间建立连接的数据库或网络应用程序)以便向用户提供应用程序正在加载的反馈。
启动画面出现在屏幕中央。添加Qt::WindowStaysOnTopHint到splash小部件的窗口标志可能是有用的如果你想让它在桌面上的所有其他窗口之上。
一些X11窗口管理器不支持“停留在顶部”标志。一个解决方案是设置一个计时器定期调用启动屏幕上的raise()来模拟“停留在顶部”的效果。
最常见的用法是在主小部件显示在屏幕上之前显示一个闪屏。下面的代码片段说明了这一点在显示应用程序的主窗口之前会显示一个闪屏并执行一些初始化任务: int 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();}用户可以通过点击鼠标来隐藏闪屏。由于闪屏通常是在事件循环开始运行之前显示的因此有必要定期调用QApplication::processEvents()来接收鼠标点击。
有时用消息更新启动屏幕是有用的例如在应用程序启动时宣布连接建立或模块加载: QPixmap pixmap(:/splash.png);QSplashScreen *splash new QSplashScreen(pixmap);splash-show();... // Loading some itemssplash-showMessage(Loaded modules);qApp-processEvents();... // Establishing connectionssplash-showMessage(Established connections);qApp-processEvents();QSplashScreen通过showMessage()函数支持这一点。如果你想自己绘图你可以使用pixmap()获得一个指向启动屏幕中使用的像素图的指针。或者你可以继承QSplashScreen并重新实现drawContents()。
使用场景
QSplashScreen的使用场景包括但不限于以下几种情况
启动时间较长的应用程序对于启动时间较长、需要后台进行大量初始化的应用程序QSplashScreen可以提供一个简单的启动画面向用户展示应用程序正在加载而不是让用户在空白或未响应的界面上等待。这有助于改善用户体验让用户知道程序正在后台进行必要的准备工作。需要显示加载进度的应用程序如果应用程序在启动过程中需要进行大量数据处理或资源加载QSplashScreen可以提供一个包含加载进度信息的界面。通过QSplashScreen的自定义功能可以实时更新加载进度让用户了解程序启动的进度情况。需要展示程序名称、版本信息的应用程序QSplashScreen可以显示应用程序的名称和版本信息这对于一些需要向用户展示程序基本信息的应用程序来说是非常有用的。通过在启动画面上显示这些信息用户可以更直观地了解正在运行的应用程序的身份和版本。需要实现渐变效果的应用程序QSplashScreen支持设置透明度和渐变效果可以让启动画面在显示过程中逐渐淡入或淡出增加视觉效果。这对于一些需要追求精美效果的应用程序来说是非常合适的。需要进行连接数据库或网络的应用程序对于需要连接数据库或网络的应用程序QSplashScreen可以在连接过程中显示一些提示信息或进度条让用户知道程序正在进行连接操作。这有助于改善用户体验让用户知道应用程序正在执行特定的任务。
总的来说QSplashScreen的使用场景主要是那些需要在应用程序启动时提供视觉反馈、加载进度、基本信息展示以及需要实现渐变效果和连接数据库或网络的应用程序。通过使用QSplashScreen这些应用程序可以在启动过程中提供更好的用户体验和视觉效果。
方法 QSplashScreen::QSplashScreen(const QPixmap pixmap QPixmap(), Qt::WindowFlags f Qt::WindowFlags()) 构造一个显示 pixmap 的启动画面Splash Screen。 除了可能使用 Qt::WindowStaysOnTopHint 标志外通常不需要设置其他绘件标志。 QSplashScreen::QSplashScreen(QWidget *parent, const QPixmap pixmap QPixmap(), Qt::WindowFlags f Qt::WindowFlags()) 这是一个重载函数。 该函数允许您为启动画面指定一个父窗口。此构造函数的典型用途是当您拥有多个屏幕并希望在启动画面上显示于主要屏幕不同的屏幕上。在这种情况下将适当的 desktop() 作为父窗口传递进来。 [virtual] QSplashScreen::~QSplashScreen() 析构函数。 [slot] void QSplashScreen::clearMessage() 清除在启动画面上显示的消息。 参见 showMessage()。 [virtual protected] void QSplashScreen::drawContents(QPainter *painter) 使用 painter 绘制启动画面的内容。默认实现会绘制 showMessage() 传递的消息。如果您想要在启动画面上进行自定义绘制请重新实现此函数。 [virtual protected] bool QSplashScreen::event(QEvent *e) 从 QObject::event() 重新实现。 void QSplashScreen::finish(QWidget *mainWin) 使启动画面在显示 mainWin 窗口后再调用自己的 close() 函数。 QString QSplashScreen::message() const 返回当前在启动画面上显示的消息。 [signal] void QSplashScreen::messageChanged(const QString message) 当启动画面上的消息发生变化时发出此信号。message 是新消息在消息被清除时为一个空字符串。 [virtual protected] void QSplashScreen::mousePressEvent(QMouseEvent *) 从 QWidget::mousePressEvent() 重新实现。 const QPixmap QSplashScreen::pixmap() const 返回用于显示启动画面的 pixmap。该图像不包含通过 showMessage() 绘制的任何文本。 void QSplashScreen::repaint() 此方法覆盖了 QWidget::repaint()。与标准的 repaint 函数不同它还调用 QApplication::processEvents()以确保更新的内容能够被显示即使没有事件循环。 void QSplashScreen::setPixmap(const QPixmap pixmap) 设置用作启动画面图像的 pixmap。 [slot] void QSplashScreen::showMessage(const QString message, int alignment Qt::AlignLeft, const QColor color Qt::black) 使用 color 颜色将消息文本绘制到启动画面上并根据 alignment 中的标志对齐文本。此函数调用 repaint() 来确保启动画面立即更新。因此消息可以根据应用程序的动作例如加载文件及时更新。
示例
.h
#ifndef CUSTOMSPLASHSCREEN_H
#define CUSTOMSPLASHSCREEN_H#include QSplashScreen// 前置声明
QT_FORWARD_DECLARE_CLASS(QProgressBar)/*** brief The CustomSplashScreen class 自定义开场动画类*/
class CustomSplashScreen : public QSplashScreen
{Q_OBJECT
public:explicit CustomSplashScreen(QWidget *parent nullptr);// 初始化void init();private:// 进度条QProgressBar* m_pProgressBar;
};#endif // CUSTOMSPLASHSCREEN_H.cpp
#include customsplashscreen.h#include QPixmap
#include QThread
#include QDateTime
#include QApplication
#include QProgressBar
#include QVBoxLayout
#include QHBoxLayout
#include QLabel
#include QDebug#define DELAYTIME 1000 // DELAYTIME为需要延时的毫秒数
#define SHOWNO 3 // 显示加载次数CustomSplashScreen::CustomSplashScreen(QWidget *parent) : QSplashScreen(parent)
{QString strScreen ./ss.jpg;QFont font this-font();font.setPixelSize(23);setFont(font);// 设置像素图QPixmap loadingPix(strScreen);setPixmap(loadingPix.scaled(500, 300));// 进度条m_pProgressBar new QProgressBar(this);m_pProgressBar-setRange(0 ,100);m_pProgressBar-setValue(0);m_pProgressBar-setStyleSheet(QProgressBar{color:#ff0000;});QLabel* pLabel new QLabel(加载中...);pLabel-setStyleSheet(QLabel {color:#ff0000; font-weight: bold; font-style: italic; font-size: 23px;});QHBoxLayout* pHB new QHBoxLayout();pHB-addStretch();pHB-addWidget(pLabel);pHB-addStretch();QVBoxLayout* pVB new QVBoxLayout(this);pVB-addStretch();pVB-addLayout(pHB);pVB-addWidget(m_pProgressBar);this-setLayout(pVB);
}void CustomSplashScreen::init()
{// 先设置显示再设置显示信息如果设置完显示信息再设置显示会看不到show();// 设置鼠标指针不转圈QApplication::setOverrideCursor(Qt::ArrowCursor);// 显示信息及文本对齐方式右上 字体:redshowMessage(程序正在加载..., Qt::AlignTop|Qt::AlignRight, Qt::red);QDateTime time QDateTime::currentDateTime();QDateTime currentTime QDateTime::currentDateTime(); // 记录当前时间m_pProgressBar-setValue(0);int nInter time.msecsTo(currentTime);while(nInter DELAYTIME){currentTime QDateTime::currentDateTime();m_pProgressBar-setValue(0.025*nInter);nInter time.msecsTo(currentTime);}for(int i 0; i SHOWNO; i){showMessage(QString(请稍等%1...).arg(SHOWNO-i), Qt::AlignTop|Qt::AlignRight, Qt::red);time currentTime;nInter time.msecsTo(currentTime);while(nInter DELAYTIME){currentTime QDateTime::currentDateTime();m_pProgressBar-setValue(25*(i1) 0.025*nInter);nInter time.msecsTo(currentTime);}}m_pProgressBar-setValue(100);
}
main.cpp
#include mainwindow.h
#include QApplication#include customsplashscreen.hint main(int argc, char *argv[])
{QApplication a(argc, argv);CustomSplashScreen ss;// 初始化ss.init();MainWindow w;w.show();// 动画结束ss.finish(w);return a.exec();
}
完整示例链接
完整示例链接见文章最上方。