码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-09-11 11:48:42      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:响应   意图   线程   int   div   slot   情况   void   停止   

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);
}

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

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

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

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

 

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

标签:响应   意图   线程   int   div   slot   情况   void   停止   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!