QT 自定义加载等待(Loading)提示框

QT自定义加载等待提示框

一、效果展示

在这里插入图片描述

二、源代码
#ifndef LOADINGDIALOG_H
#define LOADINGDIALOG_H
#include <QMovie>
#include <QLabel>
#include <QDialog>
#include <QPainter>
#include <QPushButton>
#include <QGraphicsDropShadowEffect>
#define USER_CANCEL -1
class LoadingDialog : public QDialog
{
    Q_OBJECT
public:
    explicit LoadingDialog(QWidget *parent = nullptr);
    ~LoadingDialog();
    //设置提示文本
    void setTipsText(QString strTipsText);
    //设置是否显示取消等待按钮
    void setCanCancel(bool bCanCancel);
    //移动到指定窗口中间显示
    void moveToCenter(QWidget* pParent);
protected:
    void paintEvent(QPaintEvent *event) override;
private:
    void initUi();
Q_SIGNALS:
    void cancelWaiting();
private slots:
    void cancelBtnClicked();
private:
    QFrame *m_pCenterFrame;
    QLabel *m_pMovieLabel;
    QMovie *m_pLoadingMovie;
    QLabel *m_pTipsLabel;
    QPushButton *m_pCancelBtn;
};
#endif // LOADINGDIALOG_H
#pragma execution_character_set("utf-8")
#include "LoadingDialog.h"

LoadingDialog::LoadingDialog(QWidget *parent) : QDialog(parent)
{
    //如果需要显示任务栏对话框则删除Qt::Tool
    setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);
    setAttribute(Qt::WA_TranslucentBackground, true);
    initUi();
}

/**
 * @brief LoadingDialog::initUi UI元素初始化
 */
void LoadingDialog::initUi()
{
    this->setFixedSize(250, 250);
    m_pCenterFrame = new QFrame(this);
    m_pCenterFrame->setGeometry(10, 10 ,230, 230);

    //加载Loading动画
    m_pLoadingMovie = new QMovie(":/image/loding.gif");
    m_pLoadingMovie->setScaledSize(QSize(120, 120));
    m_pMovieLabel = new QLabel(m_pCenterFrame);
    m_pMovieLabel->setGeometry(55, 10, 120, 120);
    m_pMovieLabel->setScaledContents(true);
    m_pMovieLabel->setMovie(m_pLoadingMovie);
    m_pLoadingMovie->start();

    //提示文本
    m_pTipsLabel = new QLabel(m_pCenterFrame);
    m_pTipsLabel->setGeometry(5, 130, 220, 50);
    m_pTipsLabel->setAlignment(Qt::AlignCenter | Qt::AlignHCenter);
    m_pTipsLabel->setObjectName("tips");
    m_pTipsLabel->setText("加载中,请稍候...");
    m_pTipsLabel->setStyleSheet("QLabel#tips{font-family:\"Microsoft YaHei\";font-size: 15px;color: #333333;}");

    //取消按钮
    m_pCancelBtn = new QPushButton(m_pCenterFrame);
    m_pCancelBtn->setObjectName("cancelBtn");
    m_pCancelBtn->setText("取消等待");
    m_pCancelBtn->setStyleSheet("QPushButton#cancelBtn{"
                                    "background-color: #edeef6;"
                                    "border-radius: 4px;"
                                    "font-family: \"Microsoft YaHei\";"
                                    "font-size: 14px;"
                                    "color: #333333;"
                                "}"
                                "QPushButton#cancelBtn::hover{"
                                    "background:#dcdeea"
                                "}");
    m_pCancelBtn->setGeometry(25, 180, 180, 35);
    m_pCancelBtn->setEnabled(true);
    connect(m_pCancelBtn, &QPushButton::clicked, this, &LoadingDialog::cancelBtnClicked);

    //实例阴影shadow
    QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);
    shadow->setOffset(0, 0);
    shadow->setColor(QColor(32, 101, 165));
    shadow->setBlurRadius(10);
    this->setGraphicsEffect(shadow);
}

/**
 * @brief LoadingDialog::setTipsText 设置提示文本
 * @param strTipsText 提示文本
 */
void LoadingDialog::setTipsText(QString strTipsText)
{
    m_pTipsLabel->setText(strTipsText);
}

/**
 * @brief LoadingDialog::setCanCancel 设置是够允许用户点击取消等待按钮
 * @param bCanCancel 是够允许
 */
void LoadingDialog::setCanCancel(bool bCanCancel)
{
    m_pCancelBtn->setEnabled(bCanCancel);
}

/**
 * @brief LoadingDialog::moveToCenter 移动对话框到指定窗口中间
 * @param pParent 指定窗口指针
 */
void LoadingDialog::moveToCenter(QWidget *pParent)
{
    if(pParent != nullptr && pParent != NULL)
    {
        int nParentWidth = pParent->width();
        int nParentHeigth = pParent->height();

        int nWidth = this->width();
        int nHeight = this->height();

        int nParentX = pParent->x();
        int nParentY = pParent->y();

        int x = (nParentX + (nParentWidth - nWidth) / 2);
        int y = (nParentY + (nParentHeigth - nHeight) / 2);

        this->move(x, y);
    }
}

/**
 * @brief LoadingDialog::cancelBtnClicked 取消按钮槽函数
 */
void LoadingDialog::cancelBtnClicked()
{
    emit cancelWaiting();
    this->done(USER_CANCEL);
}

/**
 * @brief LoadingDialog::paintEvent 界面绘制
 * @param event
 */
void LoadingDialog::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing); //反锯齿
    painter.setBrush(QBrush(Qt::white));
    painter.setPen(Qt::transparent);
    QRect rect = this->rect();
    rect.setLeft(9);
    rect.setTop(9);
    rect.setWidth(rect.width() - 9);
    rect.setHeight(rect.height() - 9);
    painter.drawRoundedRect(rect, 8, 8);
    QWidget::paintEvent(event);
}

LoadingDialog::~LoadingDialog()
{
    delete m_pLoadingMovie;
    delete m_pMovieLabel;
    delete m_pTipsLabel;
    delete m_pCancelBtn;
    delete m_pCenterFrame;
}
三、附上动态图,百度找的(侵删)

在这里插入图片描述

### 回答1: Qt自定义消息提示框是指开发者可以根据自己的需求设计出符合自己应用程序风格的消息提示框,从而提高应用程序的用户体验。可以使用Qt的QWidget或QDialog等控件来实现消息的展示和弹出。一般而言,自定义消息提示框通常包括标题、消息内容和按钮,通过控制按钮的显示和响应来实现交互。同时,还需要考虑消息提示框的美观和易读性,比如可以选择一些颜色和图标来增强视觉效果,并且还需要支持多语言,方便不同国家和地区的用户使用。另外,为了方便使用,还可以将自定义消息提示框封装成一个函数或类,供应用程序中其他地方调用。总之,Qt自定义消息提示框的使用可以大大提升应用程序的用户体验,增强用户的满意度和忠诚度。 ### 回答2: QT框架提供了一个简便实用的方法来实现自定义消息提示框。首先,我们可以创建一个继承自QWidget类的消息提示框,这个类可以包含我们自定义的消息显示区域、确定按钮和取消按钮等控件。接下来,我们可以通过使用QHBoxLayout或QVBoxLayout等布局管理器来设置这些控件的位置和大小,使得它们在提示框中排版合理。同时,在确定按钮和取消按钮的点击事件中,我们可以使用accept()和reject()函数来确认或取消消息提示框的显示。 值得注意的是,在消息提示框的显示过程中,我们可以使用QPropertyAnimation等动画效果来增加提示框显示时的平滑感。另外,为了使得消息提示框更加美观,我们也可以在其样式表中设置背景、边框等相关样式。最终,我们可以通过调用自定义消息提示框类的实例来显示我们自己设计的消息提示框,在用户点击确定或取消按钮后,根据其结果来进行相应的操作。 综上所述,通过继承QWidget类并使用布局管理器、动画效果和样式表等技巧,我们可以实现自定义的消息提示框,并在QT应用程序中使用它来提供更好的用户体验。 ### 回答3: QT是一款非常强大的跨平台图形用户界面库,开发者可以使用QT框架创建丰富功能的图形化应用程序。其中,消息提示框是在应用程序中非常常用的一种控件,使用者可以在提示框中显示各种类型的消息,比如警告、错误和信息等等。本文将介绍如何使用QT自定义消息提示框。 首先,我们需要创建一个新窗口,用于显示自定义消息提示框。然后,我们可以在窗口中添加各种控件,比如QLabel、QPushButton和QMessageBox等控件。控件的颜色、大小和位置等属性可以按照自己的设计来设置。 接下来,我们需要添加一些功能,比如设置提示框的标题、消息内容和图标等。在处理这些功能时,我们可以使用QT提供的信号和槽机制。比如,在点击按钮时,我们可以发出一个信号,然后使用槽函数来处理信号并显示消息内容。 最后,我们需要将自定义的消息提示框集成到我们的应用程序中。这可以通过调用消息框的show函数来实现。如果我们希望用户能够在不关闭提示框的情况下执行其他操作,我们可以调用消息框的exec函数。 总之,使用QT自定义消息提示框是非常简单的,只需要创建一个新窗口并添加所需的控件和功能即可。同时,QT也提供了丰富的文档和示例,可以帮助我们更好地理解和使用自定义消息提示框
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值