QT中使用定时器实现等待框的一实际应用情况

MainWindow::MainWindow(QWidget *parent)
: CustomWindow(parent)
{

mIndex = 1;
mpLoadLabel = new QLabel(this);
mpTipLabel = new QLabel(this);
mpTimer = new QTimer(this);

mpTipLabel->setText(QString::fromLocal8Bit("拼命加载中..."));

// 设定超时时间100毫秒
mpTimer->setInterval(100);
connect(mpTimer,SIGNAL(timeout()), this, SLOT(updatePixmap()));

startAnimation();
}

// 启动定时器
void MainWindow::startAnimation()
{
mpTimer->start();
}

// 停止定时器
void MainWindow::stopAnimation()
{
mpTimer->stop();
}

// 更新图标
void MainWindow::updatePixmap()
{
// 若当前图标下标超过8表示到达末尾,重新计数。
mIndex++;
if (mIndex > 8)
mIndex = 1;

QPixmap pixmap(QString(":/Images/loading%1").arg(m_nIndex));
mpLoadLabel->setPixmap(pixmap);
}

其意图就是使用定时器,在超时时切换图片来实现一个近似的旋转等待过程。原理很简单,但是在实际应用中,却没有这么好用。首先在我的项目中,我想要实现在主窗口线程进行数据导入的间隙,能显示这样一个旋转等待图片的窗口。

但是,如果仅一条线程在进行这些工作,将上述代码放置在主窗口类下,导入数据时,主线程在其他类中读取数据,主窗口中的定时器便失去了作用。而后我添加了一条子线程去读取数据,主线程用来运行定时器,但是又遇到新的问题,

主线程必须进行一个循环等待,直到子线程运行结束,而主线程进行循环等待的话,定时器也失去了作用,主线程没有空闲去处理定时器的超时及信号槽响应。因此在这种情形之下,这种方法无法实现应用,最后,只能放弃使用定时器,

在主线程的循环等待中添加延时,延时一定时间就调用图片切换,也就是一个简陋版的定时器。

原文地址:https://www.cnblogs.com/zhangli07/p/11504952.html

时间: 2024-08-26 22:34:56

QT中使用定时器实现等待框的一实际应用情况的相关文章

Qt中使用定时器(可使用QObject::timerEvent定时执行,QTimer::singleShot可只触发一次)

在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度 1.QObject类的定时器 QObject是所有Qt对象的基类,它提供了一个基本的定时器.通过QObject::startTimer(),可以把一个一毫秒为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整数定时器的标识符.这个定时器开始就会在每一个时间间隔"触发",直到明确的使用这个定时器的标识符来调用QObjec

QT中使用类似sleep等待的方法

#include <QCoreApplication> void waitSec(int s) { //#ifdef WIN32 // Sleep(1000); //#else // sleep(1); //#endif QTime t; t.start(); while(t.elapsed()<1000*s) QCoreApplication::processEvents(); } sleep(1); 和 QTime t; t.start(); while(t.elapsed()<

Qt中两种定时器用法

在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. 1.QObject类的定时器 QObject是所有Qt对象的基类,它提供了一个基本的定时器.通过QObject::startTimer(),可以把一个一毫秒为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整数定时器的标识符.这个定时器开始就会在每一个时间间隔"触发",直到明确的使用这个定时器的标识符来调用QObje

Qt学习 之 定时器

在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. QObject类的定时器 QObject是所有Qt对象的基类,它提供了一个基本的定时器.通过QObject::startTimer(),可以把一个一毫秒为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整数定时器的标识符.这个定时器开始就会在每一个时间间隔"触发",直到明确的使用这个定时器的标识符来调用QObject

qt中定时器Timer的使用

qt中定时器Timer的使用,布布扣,bubuko.com

自定义加载等待框(MBProgressHUD)

一.网上下载  MBProgessHUD 类文件,直接导入到工程即可 二.示例分析 在我的工程中示例如下: 1)在ShowImageViewController.h头文件代码如下: #import <UIKit/UIKit.h> #import "MBProgressHUD.h" @interface ShowImageViewController : UIViewController<MBProgressHUDDelegate> { NSString     

Qt中的标准对话框

1.标准对话框 (1)Qt为开发者提供了一些可复用的对话框类型 (2)Qt提供的可复用对话框全部继承自QDialog类 @1:QMessageBox(用来提示消息的对话框) QFileDialog(文件对话框) QPrintDialog QColorDialog(用来选择一种颜色) QInputDialog QProgressDialog 这些对话框类型全部继承自QDialog类 (3)Qt中标准对话框遵循相同的使用方式 DialogType dlg(this); //先定义对话框对象,Dial

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

本文转载至 http://blog.csdn.net/xunyn/article/details/8064984 原文地址http://www.189works.com/article-89289-1.html MBProgressHUD 下载地址是: http://github.com/matej/MBProgressHUD 这里介绍一下网友开源的MBProgressHUD类,实现等待框, 一.网上下载  MBProgessHUD 类文件,直接导入到工程即可 二.示例分析 在我的工程中示例如下

第38课 Qt中的事件处理(上)

1. GUI程序原理回顾 (1)图形界面应用程序的消息处理模型 (2)思考:操作系统发送的消息如何转变为Qt信号 2. Qt中的事件处理 (1)Qt平台将系统产生的消息转换为Qt事件 ①Qt事件是一个QEvent的对象 ②Qt事件用于描述程序内部或外部发生的动作 ③任意的QObject对象都具备事件处理的能力 (2)GUI应用程序的事件处理方式 ①Qt事件产生后立即被分发到QWidget对象 ②QWidget中的event(QEvent*)进行事件处理 ③event()根据事件类型的不同,调用不