qt使用动画提示正在载中

当程序加载较慢的时候,为了告知用户正在加载,需要在界面上显示正在加载中的提示。下面简单说一下自己使用中出现的问题。

一、在主线程中使用动画加载

创建基于qapplication的项目,以qdialog类为基类,有.ui文件。
项目的结构如下图所示:
在这里插入图片描述
需要自己在网上找一些加载中的动图存入gifs文件夹中,建立项目后,向项目中添加资源文件,即添加新文件-》添加qt资源文件-》添加资源文件的文件夹名(这里填写的是qrc)-》向其中添加前缀,添加文件,再保存。
下面是创建的一个小的demo,直接上代码。
main.cpp

#include "dialog.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();return a.exec();
}

上面的main.cpp采用的是自动生成的文件,未做任何改动。
dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QLabel>
#include <QMovie>QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();void loadingGif();
private:Ui::Dialog *ui;QLabel * m_label;QLabel * m_textLabel;QMovie * m_movie;
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);loadingGif();
}Dialog::~Dialog()
{m_movie->stop();if(m_movie != nullptr){delete m_movie;m_movie = nullptr;}delete ui;
}void Dialog::loadingGif()
{m_label = new QLabel(this);m_textLabel = new QLabel("正在加载......",this);m_label->setGeometry(150,130,120,120);m_textLabel->setGeometry(150,250,120,40);m_movie = new QMovie(":/new/prefix1/gifs/771.gif");m_label->setScaledContents(true);//缩放label使其适应其内容m_label->setFixedSize(120,120);m_label->setMovie(m_movie);m_movie->start();
}

以上便是项目的源文件,运行程序后效果如下。
在这里插入图片描述
编译环境为:qtcreate5.13.2,编译器为MinGW32位。

二、通过子线程使用动画加载

也是创建基于qapplication的应用程序,基类位qdialog,包含ui文件。
文件的结构如下:
在这里插入图片描述
具体的代码如下:
mian.cpp

#include "dialog.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();return a.exec();
}

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include "hintthread.h"
#include <QDialog>
#include <QLabel>
#include <QMovie>
#include <QVBoxLayout>QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();void diaplayHintMark();//显示正在更新的动画
public slots:void slot_displayHintMark();
private:Ui::Dialog *ui;QLabel *    m_label;QMovie *    m_movie;QLabel *    m_textLabel;QVBoxLayout * m_layout;hintThread  * m_thread;
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include <QPalette>Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);//    this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowMinimizeButtonHint);QPalette palette(this->palette());palette.setColor(QPalette::Background, QColor(16,48,155,255));this->setPalette(palette);
//    this->setAttribute(Qt::WA_TranslucentBackground);//创建线程,子线程更新提示m_thread = new hintThread(this);m_thread->start();//    diaplayHintMark();
}Dialog::~Dialog()
{m_movie->stop();if(m_movie != nullptr){delete m_movie;m_movie = nullptr;}if(m_thread->isRunning()){m_thread->quit();m_thread->wait();if(m_thread != nullptr){delete m_thread;m_thread = nullptr;}}else{if(m_thread != nullptr){delete m_thread;m_thread = nullptr;}}delete ui;
}void Dialog::diaplayHintMark()
{qDebug()<<"开始加载";//ui->insideWidgetm_label = new QLabel(this/*,Qt::WindowStaysOnTopHint*/);m_movie = new QMovie(":/new/prefix1/gifs/771.gif");m_label->setGeometry(QRect(100,100,120,120));m_label->setFixedSize(120,120);m_label->setScaledContents(true);m_label->setMovie(m_movie);m_textLabel = new QLabel("努力加载中,请稍后.....",this);m_textLabel->setGeometry(100,220,300,40);m_label->show();//没有调用显示函数m_textLabel->show();m_movie->start();qDebug()<<"你好。。。。!";qDebug()<<"what should i do。。。。!";
}void Dialog::slot_displayHintMark()
{diaplayHintMark();
}

hintthread.h

#ifndef HINTTHREAD_H
#define HINTTHREAD_H#include <QThread>class Dialog;
class hintThread : public QThread
{
Q_OBJECT
public:hintThread(Dialog * dlg);hintThread(QObject* parent = 0);
signals:void signalDisplayHintMark();
public slots:void slot_displayHintMark();
protected:void run();
private:Dialog * m_dlg;
};
#endif // HINTTHREAD_H

hintthread.cpp

#include "hintthread.h"
#include "dialog.h"hintThread::hintThread(Dialog * dlg)
:QThread()
{m_dlg = dlg;//以下两种信号槽绑定都可以
//    connect(this,SIGNAL(signalDisplayHintMark()),m_dlg,SLOT(slot_displayHintMark()));connect(this,SIGNAL(signalDisplayHintMark()),this,SLOT(slot_displayHintMark()));
}hintThread::hintThread(QObject* parent): QThread(parent)
{}void hintThread::slot_displayHintMark()
{m_dlg->diaplayHintMark();
}void hintThread::run()
{emit signalDisplayHintMark();
}

程序的运行效果和上面类似 。第二个例子中通过创建子线程时传入主线程的指针,在子线程中发出信号,通过主线程指针调取主线程ui中的函数。上面第二个例子中,diaplayHintMark()函数未调用两个label的show()显示时,无法正常的显示,此时,函数中label也已设置了父窗口,但没法显示。在第一个例子中,也只是设置了label的父窗口,没有调用show(),可以显示,没想明白是什么原因,望知情者告知。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云存储精华问答 | 云存储的优势在哪?

云存储是一种网上在线存储&#xff08;英语&#xff1a;Cloud storage&#xff09;的模式&#xff0c;即把数据存放在通常由第三方托管的多台虚拟服务器&#xff0c;而非专属的服务器上。今天就让我们来看看关于云陈存储的精华问答吧。1Q&#xff1a;云存储是如何分类的&#x…

Github上Fork部署应用程序

Github上Fork部署应用程序 1. Fork简述及作用2. 登录Github&#xff0c;搜索项目3. Github上打开fork的部署应用4. 点击Fork&#xff0c;并确认邮件5. 登录自己的github&#xff0c;查看fork的项目 1. Fork简述及作用 Fork作用&#xff1a;获得代码修改的权限 简述&#xff1a…

Windows OpenGL 图像色阶

目录 一.OpenGL 图像色阶 1.原始图片2.效果演示 二.OpenGL 图像色阶源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习…

qt解决循环创建的控件,每个都绑定相同的槽函数时出现的一对多响应问题

应用场景 若需要在程序运行期间根据控件数动态创建控件&#xff0c;且创建的每一个控件在某一个信号发生时会触发相同的槽函数。 问题描述 上述所导致的问题是在触发其中一个控件的时候&#xff0c;其它的控件也会响应该槽函数&#xff0c;出现了一对多的绑定。 示例 clas…

用栈和队列分别实现求解迷宫问题(c++,c)

求解迷宫问题&#xff1a;给定一个迷宫要求输出其路径。 给出的迷宫如下&#xff08;可自行更改&#xff09; 可用两种方法实现1.栈2.队列 用栈只能找到路但路不是最简的最简的要用队列实现 用栈实现&#xff08;解析都在代码里了&#xff09; c&#xff08;实现&#xff0…

高达100亿美元!美国国防部将IBM和甲骨文双双踢出了云计算合同;华为任正非说了,华为对向苹果等对手出售5G芯片保持开放的态度...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 微软全数位版本Xbox One S&a…

OpenGL 灰度图

目录 一.OpenGL 灰度图 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 灰度图 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 &…

将Github中Fork的代码,克隆到本地

将Github中Fork的代码&#xff0c;克隆到本地 1. 在Github打开Fork的工程2. 单击clone or download按钮&#xff0c;复制Github克隆链接3.进入本地需要存储应用源程序的路径 将源代码clone到本地 1. 在Github打开Fork的工程 登录Github&#xff0c;点击Fork的项目即可&#xf…

Windows OpenGL ES 图像灰度图

目录 一.OpenGL ES 图像灰度图 1.原始图片2.效果演示 二.OpenGL ES 图像灰度图源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 Open…

VMware竟然出了一款防火墙

戳蓝字“CSDN云计算”关注我们哦&#xff01;极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;防火墙&#xff0c;这个在安全界“恐龙时代”就存在的产品&#xff0c;相信但凡…

qt项目中的某一个类的输出中文信息乱码,其它类中文输出正常

问题描述 qtcreate5.13.2中整个项目中通过添加头文件&#xff0c;使用qDebug()输出中文打印信息&#xff0c;输出中文都是正常的&#xff0c;但是有一个类的输出中文是乱码。 解决方法 修改该类的编码格式。由于项目默认采用的是utf-8编码&#xff0c;但此类的编码采用的是G…

Navicat创建数据库表 、导入sql文件,生成表结构

Navicat创建数据库表 、导入sql文件&#xff0c;生成表结构 1.打开Navicat2.远程连接mysql连接3.创建数据库4.导入sql文件5.生成表结构 1.打开Navicat 2.远程连接mysql连接 3.创建数据库 4.导入sql文件 导入源代码中的sql文件 5.生成表结构

将本地源代码程序推送远程Github仓库

将本地源代码程序推送远程Github仓库 1.查看改动文件的状态2.将修改的代码从工作区添加至暂存区3.将暂存区的代码添加至本地仓库4.将本地仓库中的代码Push到Github5.登录Github&#xff0c;查看是否推送代码成功 1.查看改动文件的状态 git status2.将修改的代码从工作区添加至…

OpenStack网络的下一步原来这么走 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;最新版本的OpenStack Stein很快就要发布了&#xff0c;社区将在4月10日一起庆祝。对于…

qt5.13.2输出中文乱码

qt5使用qDebug()输出中文乱码&#xff0c;可以在.pro文件中添加以下的代码&#xff1a; #解决中文编译没法通过&#xff0c;输出中文乱码 msvc {QMAKE_CFLAGS /utf-8QMAKE_CXXFLAGS /utf-8 }

Windows OpenGL 图像灰度图

目录 一.OpenGL 图像灰度图 1.原始图片2.效果演示 二.OpenGL 图像灰度图源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES …

Spring精华问答 | 什么是Spring inner beans?

Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持。今天就让我们来看看关于Spring的精华问答吧。1Q&#xff1a;请解释Spring Bean的生命周期&#xff1f;A&#xff1a;Spring Bean的生命周期简单易懂。在一个bean实例被…

gb-heima/order 项目 处理

gb-heima/order 项目 处理 1. 用Intellij Idea打开克隆好的项目2. 代码源程序简要说明3. 使用Maven构建该项目 1. 用Intellij Idea打开克隆好的项目 2. 代码源程序简要说明简要说明代码源程序 3. 使用Maven构建该项目 在Intellij Idea中使用Maven构建该项目Maven 构建项目

qt使用自带的日志输出实例输出日志时,在日志中显示行数

当使用qInstallMessageHandler&#xff08;&#xff09;安装回调函数&#xff0c;通过回调函数来输出日志时&#xff0c;日志文件中没有行数和文件信息。可以在.pro文件中添加以下代码&#xff1a; #release中在日志添加行数&#xff0c;文件信息 DEFINES QT_MESSAGELOGCONTE…

Windows OpenGL ES 图像单色

目录 一.OpenGL ES 图像单色 1.原始图片2.效果演示 二.OpenGL ES 图像单色源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL E…