我正在尝试创建一个QProgressBar来指示一个操作的执行,我不知道在执行之前它需要多长时间才能完成。
现在我有以下几点
QProgressBar DLbar;
DLbar.setMaximum(0);
DLbar.setMinimum(0);
DLbar.show();我已经将最小值和最大值设置为0,这将导致基于Qt文档的繁忙指示符。
如果“最小”和“最大值”都设置为0,则栏将显示一个繁忙的指示符,而不是步骤的百分比。例如,当QNetworkAccessManager无法确定要下载的项目的大小时,这是非常有用的。
当我运行程序时,进度条会显示出来,但它不是有繁忙的指示符,而是满的,一直保持到操作结束。
我尝试将DLbar父窗口设置为主窗口,但也存在同样的问题。
示例:
QProgressBar DLbar;
DLbar.setMaximum(0);
DLbar.setMinimum(0);
DLbar.show();
for( int i=0; i<1000000; i++ )
qDebug() << i;发布于 2017-06-15 16:30:17
基本问题是,您不允许Qt事件循环处理事件。一个最简单的例子就是.
#include <cstdlib>
#include <chrono>
#include <thread>
#include <QApplication>
#include <QProgressBar>
int
main (int argc, char **argv)
{
QApplication app(argc, argv);
QProgressBar DLbar;
DLbar.setMaximum(0);
DLbar.setMinimum(0);
DLbar.show();
/*
* The following sleep will prevent any events being processed for 10s...
*/
std::this_thread::sleep_for(std::chrono::seconds(10));
/*
* ...after which we start the event loop and everything should start working.
*/
exit(app.exec());
}如果要使用Qt,您确实需要对底层事件系统有一个明确的理解。
编辑1:你问..。
即使在循环中使用QCoreApplication::processEvents(),我仍然不明白为什么它不能工作。
如果在上面的例子中,你替换了.
exit(app.exec());和..。
while (true)
QCoreApplication::processEvents();https://stackoverflow.com/questions/44568097
复制相似问题