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-11-09 04:43:44