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::ToolsetWindowFlags(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);//实例阴影shadowQGraphicsDropShadowEffect *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;
}
三、附上动态图,百度找的(侵删)

QT 自定义加载等待(Loading)提示框相关推荐

  1. IOS开发UI篇之──自定义加载等待框(MBProgressHUD)

    这里介绍一下网友开源的MBProgressHUD类,实现等待框, 一.网上下载  MBProgessHUD 类文件,直接导入到工程即可 二.示例分析 在我的工程中示例如下: 1)在ShowImageV ...

  2. 自定义加载等待框(MBProgressHUD)

    一.网上下载  MBProgessHUD 类文件,直接导入到工程即可 二.示例分析 在我的工程中示例如下: 1)在ShowImageViewController.h头文件代码如下: #import & ...

  3. 自定义加载(loading)界面

    推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 刚接触不久就遇到困难------自定义loading.想和其他获取图片方式一样获取加载界面的图片,结果发现资源还没加载就需要图片,在网 ...

  4. js页面加载实现loading提示效果

    由于页面在加载过程中请求了很多资源,导致打开过慢,且页面无提示,对用户不友好,测试人员希望增加loading效果. 参考如下步骤可行. 实际项目展示动态loading图有自有的方法,不便贴代码,以下用 ...

  5. Qt自定义一个简单的ToolTip提示框

    实现过程 因为 QToolTip 自定义样式不大方便,而且半透明也没法设置,所以需要自定义.而且,Qt 中的顶层 widget 好像默认是不支持透明样式的,可以设置: setWindowFlags(Q ...

  6. Javascript前端加载等待圆型圈提示实现效果

    Javascript前端加载等待圆型圈提示实现效果 CSS内容 #loading {background-color: #9f9f9f;opacity: 0.15;height: 100%;width ...

  7. 【Cocos2d-html5游戏引擎学习笔记(6)】自定义Cocos2d-html5加载资源Loading界面

    这一篇其实本该放在后面写的,只是今天正好把这个整出来了,所以为了防止后面忘记,就在这里先写了. 在运行index.html文件的时候,引擎首先会把资源进行加载,这是为了让游戏在运行时更为流畅,避免了在 ...

  8. 页面加载时让其显示笼罩层与加载等待图片

    页面加载时让其显示笼罩层与加载等待图片(结局比较完美,过程很坎坷,所以一定总结整理下,备用): 用了ajax异步,是因为js内容不能即时的显示出来,因为js是单线程,要把队列中的任务执行完后才会执行刚 ...

  9. android刷新时的圆形动画_Android自定义加载圈动画效果

    本文实例为大家分享了Android自定义加载圈动画展示的具体代码,供大家参考,具体内容如下 实现如下效果: 该效果图主要有3个动画: 1.旋转动画 2.聚合动画 3.扩散动画 以上3个动画都是通过Va ...

最新文章

  1. PAT甲级题目翻译+答案 AcWing(哈希表)
  2. Node.js基本讲解
  3. linux创建a1的硬链接a2,Linux命令-重定向和软硬链接
  4. Fastformer:史上最强最快Transformer!清华、MSRA出品!
  5. java简单运算程序_JAVA实现简单四则混合运算
  6. 雅虎JavaScript架构师:网页开发技术安全优先
  7. 2021高考成绩已出城市查询,2021年青海高考成绩什么时候出来 公布时间
  8. 作为测试人员,不要说有错误,要说有什么错误
  9. 1元云购网站建设,一元云购网站制作,夺宝网站定制公司,一元云购源码开发
  10. 航测无人机测绘地理信息免费资料
  11. ios tableView截长屏图片,第三方分享
  12. 两台局域网内的阿里云服务器传文件
  13. 如何快速入门 Python 爬虫
  14. 慕尼黑工业大学计算机博士申请条件,德国慕尼黑工业大学博士生申请条件
  15. 服务器搭建个人网站(阿里云服务器)
  16. 华科智标_停车场定位导航反向寻车系统
  17. Fasm汇编程序1.73,中文文档,第一章
  18. Windows窗体Winform----show()与showDialog()的区别
  19. 国内应届生是不是把算法题刷得滚瓜烂熟就能进Google了?
  20. 集成式电子液压制动系统液压力变结构控制

热门文章

  1. SVN: can't open file‘\db\txn-current-lock’ 拒绝访问
  2. 体育生学编程——html学习
  3. http请求头有哪些?
  4. python字符串与十六进制互相转换
  5. 面对互联网裁员潮,我们该怎么提升自己核心知识能力
  6. oracle命令导入expdp,oracle的导入导出命令:expdp和impdp
  7. Android事件分发原理
  8. Ailurus 小熊猫
  9. 编程小白的计算机毕业设计指导开发教程-javaweb i18n国际化的使用
  10. sklearn的使用案例(以load_breast_cancer数据集为例)