当前位置: 首页 > news >正文

QT显示加载动画

文章目录

  • 一、前言
  • 二、使用
    • 1.FormLoading.h
    • 2.FormLoading.cpp


一、前言

项目中在下发指令时,结果异步返回,可能需要一段时间,因此需要用到加载动画。
用的比较简单,就是新建Widget子窗口,放一个Label,使用QMovie在Label中播放GIF。
当下发指令时,就打开子窗口显示加载过程,同时开启一个定时器,如果在定时器触发超时信号或超时之前收到结果,则隐藏加载过程子窗口,并关闭定时器。

二、使用

1.FormLoading.h

#ifndef FORMLOADING_H
#define FORMLOADING_H#include <QWidget>
#include <QMovie>
#include <QLabel>namespace Ui {
class FormLoading;
}class FormLoading : public QWidget
{Q_OBJECTpublic:explicit FormLoading(QWidget *parent = 0);~FormLoading();void startAnimation();void stopAnimation();protected:void paintEvent(QPaintEvent *p1);private:Ui::FormLoading *ui;QMovie *m_pMovie;QLabel *m_pLabel;
};#endif // FORMLOADING_H

2.FormLoading.cpp

#include "formloading.h"
#include "ui_formloading.h"
#include <QVBoxLayout>
#include <QPainter>
#include <QBitmap>
FormLoading::FormLoading(QWidget *parent) :QWidget(parent),ui(new Ui::FormLoading)
{ui->setupUi(this);// 设置窗口置顶和无边框this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);// 设置窗口透明用来支持圆角样式属性this->setAttribute(Qt::WA_TranslucentBackground);// 设置模态对话框this->setWindowModality(Qt::ApplicationModal);setFixedSize(350, 280);m_pMovie = new QMovie(":/images/loading.gif");m_pLabel = new QLabel(this);m_pLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);// 设置背景透明m_pLabel->setAutoFillBackground(true);//m_pLabel->setStyleSheet("width:150px;border-radius:10px; background-color: rgb(255, 255, 255);");m_pLabel->setStyleSheet("background-color: rgba(255, 255, 255, 0);");m_pLabel->setMovie(m_pMovie);QVBoxLayout *pLayout = new QVBoxLayout(this);pLayout->addWidget(m_pLabel);setLayout(pLayout);
}FormLoading::~FormLoading()
{delete ui;if(m_pMovie != nullptr){delete m_pMovie;}if(m_pLabel != nullptr){delete m_pLabel;}
}// 绘图事件
void FormLoading::paintEvent(QPaintEvent *p1)
{//绘制样式QStyleOption opt;opt.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//绘制样式QBitmap bmp(this->size());bmp.fill();QPainter painter(&bmp);painter.setPen(Qt::NoPen);painter.setBrush(Qt::black);painter.setRenderHint(QPainter::Antialiasing);painter.drawRoundedRect(bmp.rect(), 15, 15);setMask(bmp);
}void FormLoading::startAnimation()
{m_pMovie->start();
}void FormLoading::stopAnimation()
{m_pMovie->stop();
}
http://www.lryc.cn/news/114210.html

相关文章:

  • 原型模式(C++)
  • web浏览器打开本地exe应用
  • 微信小程序如何配置并使用less?
  • 【Spring】反射动态修改Bean实例的私有属性值
  • MySQL DDL 数据定义
  • Ventoy 设置VTOY_MAX_SEARCH_LEVEL = 0只扫描U盘根目录 不扫码子目录
  • vue3父子同信的双向数据实现
  • Shiro是什么?为什么要用Shiro?
  • Vue3+Vite+Pinia+Naive后台管理系统搭建之九:layout 动态路由布局
  • 从零开始学Python(Ⅰ)基本变量与数据类型
  • SQL ASNI where from group order 顺序 where和having,SQL底层执行原理
  • Mac M2 Ventura(13.3) 新机 安装Cocoapods
  • Unity 引擎做残影效果——2、屏幕后处理方式
  • 考研算法38天:反序输出 【字符串的翻转】
  • “深入解析JVM:探秘Java虚拟机的工作原理“
  • [Flask]SSTI1
  • Object Map 的相互转换
  • VS+Qt环境下解决中文乱码问题
  • 互联网摸鱼日报(2023-08-08)
  • NTT DATA利用相干伊辛机模拟基因组组装和疾病治疗的潜力
  • 哈希表语法(转载自用)
  • 打破界限,图文档与物料清单完美互联
  • 【电机绘图】:插补算法(一)—直线插补—逐点比较法
  • 16-2_Qt 5.9 C++开发指南_使用样式表Qss自定义界面
  • chatgpt openai API报错openai.error.APIConnectionError
  • 【果树农药喷洒机器人】Part1:研究现状分析以及技术路线介绍
  • QT-QTablewidget 设置选中某一行
  • [shell] 删除指定文件状态变更之前的文件及文件夹示例
  • 代码中 isEmpty 和 isBlank 的区别
  • 为什么要选择文件传输软件?有哪些最佳高速文件传输软件?