Qt 实现软件启动界面动画

这篇具有很好参考价值的文章主要介绍了Qt 实现软件启动界面动画。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现软件启动界面,用到QSplashScreen类。

效果

启动界面

描述

QSplashScreen小部件提供了一个可以在应用程序启动期间显示的启动画面。
启动画面通常是在应用程序启动时显示的小部件。启动画面通常用于启动时间较长的应用程序(例如需要花费一些时间来建立连接的数据库或网络应用程序),以向用户提供应用程序正在加载的反馈信息。

启动画面会出现在屏幕的中央。如果希望将启动画面保持在所有其他窗口之上,在启动画面的窗口标志中添加Qt::WindowStaysOnTopHint可能会很有用。

一些X11窗口管理器不支持"窗口保持在顶部"标志。解决方法是设置一个定时器,定期对启动画面调用raise()函数,以模拟"窗口保持在顶部"的效果。

最常见的用法是在显示主窗口之前显示启动画面。
下面的代码片段演示了此用法,其中显示了一个启动画面并在显示应用程序的主窗口前执行一些初始化任务:

 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 QSScreen(pixmap);
splash->show();

... // 加载一些项
splash->showMessage("已加载模块");

qApp->processEvents();

... // 建立连接
splash->showMessage("正在建立连接");

qApp->processEvents();

QSplashScreen支持使用showMessage()函数进行这样的操作。如果希望进行自定义绘制,可以使用pixmap()函数获取启动画面使用的位图的指针。或者,可以子类化QSplashScreen并重新实现drawContents()函数。

常用函数

  1. 构造函数:

    • QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags()):使用给定的位图和窗口标志构造一个QSplashScreen对象。
  2. 显示和隐藏:

    • void show():显示启动画面。
    • void finish(QWidget *mainWindow):隐藏启动画面,并将其关联到指定的主窗口。在调用此函数之前,通常会在显示主窗口前执行一些初始化任务。
    • void clearMessage():清除启动画面上显示的消息。
  3. 位图相关:

    • void setPixmap(const QPixmap &pixmap):设置启动画面使用的位图。
    • const QPixmap *pixmap() const:返回启动画面使用的位图的指针。
  4. 消息显示:

    • void showMessage(const QString &message, int alignment = Qt::AlignBottom | Qt::AlignCenter, const QColor &color = Qt::black):在启动画面上显示消息。可以设置消息的对齐方式和颜色。
  5. 其他:

    • void raise():将启动画面置于顶层。
    • bool isFullScreen() const:判断启动画面是否为全屏模式。
    • void setEnabled(bool enabled):设置启动画面是否可用。
    • void setAutoFillBackground(bool enabled):设置是否自动填充启动画面的背景。

子类化示例

.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

#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调用文章来源地址https://www.toymoban.com/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();   //记录当前时间
    // 可以添加处理业务
    while (time.msecsTo(currentTime) <= 1000)                   //1000为需要延时的毫秒数
    {
        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为需要延时的毫秒数
        {
            currentTime = QDateTime::currentDateTime();
        }
    }

到了这里,关于Qt 实现软件启动界面动画的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件设计开发笔记4:QT操作SQLite数据库

      有时候我们需要在软件中记录一些历史数据以便于对数据的查询。而我们希望软件不能太复杂,体量也不要太大,这个时候就需要如SQLite这样轻量级的数据库。这篇中我们就来讨论如何在使用QT开发应用是操作SQLite数据库。   SQLite是一款开源、轻量级、跨平台的数据库

    2024年02月09日
    浏览(62)
  • QT-登录界面的实现

    ​ 创建一个窗体,设计用户登录的界面(含有用户名、密码),并实现用户登录的功能,要求用户提交的登录按钮时能获取界面中的用户名、密码数据并与数据库中的数据进行匹配,若用户名,密码正确则登录成功,否则登录失败。 1、图片演示 2、详细代码实现 (1) dialog.c

    2024年02月16日
    浏览(37)
  • qt 实现登录界面

       

    2024年01月23日
    浏览(40)
  • QT实现两界面跳转

    mainform.h widget.h main.cpp mainform.cpp widget.cpp

    2024年02月04日
    浏览(30)
  • Qt实现引导界面UITour

    最近做了一款键鼠自动化,想第一次安装打开后搞一个引导界面,找了好多资料没啥参考,偶然发现qt有引导界面如下图。 Qt整挺好,但是未找到源码,真的不想手撸,(源码找到了但是Qt整起来太复杂,没法拿来直接用,还是得撸)地地址 下图是仿照qt实现,除了qt明亮边缘的渐

    2024年02月14日
    浏览(29)
  • python中的yolov5结合PyQt5,使用QT designer设计界面没正确启动的解决方法

    一、窗体设计test: 默认你已经设计好了窗体后: 这时你需要的是保存生成的untitle.ui到某个文件夹下,然后在命令行中奖.ui转换为.py(,通过​​pyqt5​​​提供的转换工具,将​​ui​​​文件转换成​​python​​的代码) 或者使用在PyCharm中安装的工具: 然后你会看到mai

    2024年02月07日
    浏览(46)
  • 数据库课程设计-图书馆管理系统(3. 用户软件,基于QT)

    如果对你有帮助,可以给卑微的博主留个赞、关注、收藏   (不是)  (骗一下数据,说不定以后面试就过了,拜谢) 用户软件的实现根据自己所用语言选择对应开发工具,c++ 较常用的是QT或者MFC。这里使用QT做个示例,但博主前端属实现学现卖,也就是能用级别,可以参考一下

    2024年02月09日
    浏览(47)
  • Qt纯代码实现UI界面

    设置编辑框内容的字体样式,包括加粗、下划线、斜体、蓝色、红色、黑色

    2024年01月19日
    浏览(37)
  • QT桌面(实现界面的滑动切换)

    在ARM Linux中使用QT如何实现滑动翻页切换界面的效果呢?在ARM中是没有自带的鼠标的,那么我们如何实现滑动翻页呢?经过测试发现在ARM中运行QT程序也是可以通过重写鼠标事件来捕获触屏动作的,在ARM中滑动屏幕被定义成了鼠标左键事件,那么这样就有思路了, 重写鼠标事

    2024年02月06日
    浏览(42)
  • Pycharm+qt-tools搭建界面实现界面交互

    pycharm跑demo时一般通过 cv2 或者 plt 进行可视化,但也常常面临界面交互需求 刚好pycharm支持 qt 插件进行界面开发功能 下面讲述 qt-tools 的安装与使用 安装 在pycharm中打开 命令行窗口 进入环境进行安装: 环境配置 Pycharm - file - settings - Tools - Exteenal Tools 需要绑定已安装的qt中.

    2023年04月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包