qt支持最上层弹出的自定义启动动画,实现不存在任务栏且不是固定死在最上层。

Qt::Widget               //是一个窗口或部件,有父窗口就是部件,没有就是窗口
Qt::Window               //是一个窗口,有窗口边框和标题
Qt::Dialog               //是一个对话框窗口
Qt::Sheet                //是一个窗口或部件Macintosh表单
Qt::Drawer               //是一个窗口或部件Macintosh抽屉,去掉窗口左上角的图标
Qt::Popup                //是一个弹出式顶层窗口
Qt::Tool                 //是一个工具窗口
Qt::ToolTip              //是一个提示窗口,没有标题栏和窗口边框
Qt::SplashScreen         //是一个欢迎窗口,是QSplashScreen构造函数的默认值
Qt::Desktop              //是一个桌面窗口或部件
Qt::SubWindow            //是一个子窗口
Qt::CustomizeWindowHint          //关闭默认窗口标题提示
Qt::WindowTitleHint              //为窗口修饰一个标题栏
Qt::WindowSystemMenuHint         //为窗口修饰一个窗口菜单系统
Qt::WindowMinimizeButtonHint     //为窗口添加最小化按钮
Qt::WindowMaximizeButtonHint     //为窗口添加最大化按钮
Qt::WindowMinMaxButtonsHint      //为窗口添加最大化和最小化按钮
Qt::WindowCloseButtonHint			//窗口只有一个关闭按钮
Qt::WindowStaysOnTopHint	//总在最上面的窗口,置前

main.cpp

#include "splashsceen.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    SplashSceen w;
    w.show();
    w.activateWindow(); //保证窗口从上层弹出。部分系统不设置这个也是从最上层弹出。

    return a.exec();
}

头文件

#ifndef SPLASHSCEEN_H
#define SPLASHSCEEN_H

#include <QWidget>
#include <QMovie>
#include <QApplication>
#include <QDesktopWidget>
#include <QLabel>
#include <QVBoxLayout>
class SplashSceen : public QWidget
{
    Q_OBJECT

public:
    explicit SplashSceen(QWidget *parent = nullptr);
    ~SplashSceen();

    void showEvent(QShowEvent *event);
private:
    QLabel* m_lab;
};

#endif // SPLASHSCEEN_H

cpp文件

#include "splashsceen.h"


SplashSceen::SplashSceen(QWidget *parent) :
    QWidget(parent)
{
    this->setWindowFlags(Qt::Tool|Qt::FramelessWindowHint);//设置工具窗口不显示在任务栏,且无边框
    this->setAttribute(Qt::WA_TranslucentBackground);      //背景透明
    this->setAttribute(Qt::WA_DeleteOnClose);              //close后自动析构

    this->setGeometry((QApplication::desktop()->width()-width())/2,(QApplication::desktop()->height()-height())/2,300,300);
    m_lab = new QLabel("启动动画",this);
    m_lab->setStyleSheet("font-size:28px");
    m_lab->setAlignment(Qt::AlignCenter);

    QVBoxLayout* lay = new QVBoxLayout(this);
    lay->addWidget(m_lab);
    this->setLayout(lay);
    lay->setContentsMargins(0,0,0,0);

}

SplashSceen::~SplashSceen()
{
}

void SplashSceen::showEvent(QShowEvent *event)
{
    QMovie* movie = new QMovie(m_lab);
    m_lab->setMovie(movie);
    movie->setScaledSize(m_lab->size());
    movie->setFileName("movie.gif");
    movie->start();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt的QWidget类提供了一个函数setWindowTitle()可以修改窗口的标题栏。如果你想要自定义标题栏,可以在QWidget的子类中实现以下步骤: 1. 在构造函数中设置窗口的样式为Qt::CustomizeWindowHint,这样可以禁用原生标题栏。 2. 创建一个QWidget对象作为自定义标题栏,并将它添加到QWidget子类的布局中。 3. 为自定义标题栏添加控件和布局,并实现鼠标事件以实现移动和拖动窗口。 4. 在鼠标事件处理函数中调用QWidget的move()函数以实现窗口移动。 示例代码如下: ```cpp class MyWidget : public QWidget { public: MyWidget(QWidget *parent = nullptr) : QWidget(parent) { // 禁用原生标题栏 setWindowFlags(Qt::CustomizeWindowHint); // 创建自定义标题栏 m_titleBar = new QWidget(this); m_titleBar->setFixedHeight(30); m_titleBar->setObjectName("TitleBar"); // 设置样式表用到的对象名 // 添加控件和布局 m_layout = new QHBoxLayout(m_titleBar); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->addWidget(new QLabel("My Title")); // 设置样式表 setStyleSheet("#TitleBar{background-color: #333333; color: #ffffff;}"); // 添加自定义标题栏到布局中 m_mainLayout = new QVBoxLayout(this); m_mainLayout->addWidget(m_titleBar); m_mainLayout->addWidget(new QLabel("My Content")); } protected: void mousePressEvent(QMouseEvent *event) override { // 记录鼠标按下时的位置 m_dragPosition = event->globalPos() - frameGeometry().topLeft(); } void mouseMoveEvent(QMouseEvent *event) override { // 移动窗口 if (event->buttons() & Qt::LeftButton) { move(event->globalPos() - m_dragPosition); } } private: QWidget *m_titleBar; QHBoxLayout *m_layout; QVBoxLayout *m_mainLayout; QPoint m_dragPosition; }; ``` 这样,你就可以在不隐藏原生标题栏的情况下实现自定义标题栏了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方忘忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值