【发布时间】:2020-06-19 10:31:01
【问题描述】:
我有一个简单的循环,我正在执行一个不确定长度的操作。我用range(0,0) 设置了一个QProgressDialog 来触发其不确定的“忙碌”模式;在我的平台上,这通常会产生一个进度条,其手柄来回弹跳。即使精简到以下内容,也会出现对话框,响应“取消”按钮,但句柄在栏的末端被冻结并且不会循环。
QProgressDialog* progressDialog =
new QProgressDialog("My Progress", "Cancel",
0, 0, this);
progressDialog->setAttribute(Qt::WA_DeleteOnClose, true);
progressDialog->setModal(true);
progressDialog->setMinimumDuration(0);
progressDialog->show();
progressDialog->setValue(0);
while (!done)
{
QThread::msleep(200);
QCoreApplication::processEvents();
}
显然,循环内部实际上发生了更多事情,但无论有没有内容,它的行为都是一样的;注释掉其他所有内容后剩下的内容与描述的一样。
为什么我的进度句柄没有来回弹跳?
【问题讨论】:
-
请编辑您的问题以提供minimal reproducible example。因为它是我无法重现问题(Suse Linux,Qt5.14.1)。
-
上面的例子确实重现了这个问题。如果相关,我使用的是 Qt 5.9.2。
标签: c++ qt qthread qprogressdialog