我使用的是QT 4.8.5。我在使用MinimumDuration的QProgressDialog上遇到了一些问题。 以下是文档:http://doc.qt.io/qt-4.8/qprogressdialog.html#minimumDuration-prop。
1.使用以下代码进行测试。根本不显示该对话框。但文档说:" 对话框将在最小持续时间 之后或在设置任何进度后立即弹出#34;。
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
2.使用以下代码进行测试。该对话框将在8秒后显示。但是文档说:"对话框将在最小持续时间后弹出,或者 在设置任何进度后立即弹出 "。虽然行为与文档不同,但我认为目前的行为是可以接受的。
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
3.使用以下代码进行测试。永远不会显示该对话框。但文档说:" 对话框将在最小持续时间后或一旦设置了任何进度后立即弹出 "。
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(1);
4.使用以下代码进行测试。行为与第2项相同。
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
dlg->setValue(1);
5.使用以下代码进行测试。一旦将进度值设置为1,就会显示该对话框。为什么Sleep()函数会影响此处的行为?
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
::Sleep(static_cast<DWORD>(1000));
dlg->setValue(1);
6.使用以下代码进行测试。该对话框立即显示,但我将MinimumDuration设置为5.这是一个问题吗?
QProgressDialog* dialog = new QProgressDialog("Message", "Close", 1, 10);
dialog->setMinimumDuration(5000);
dialog->setValue(0);
dialog->setValue(1);
我在Windoes上测试7.有什么问题?什么是正确的行为?
答案 0 :(得分:3)
我在OS X上使用Qt 5进行了测试,得到了相同的结果
仔细观察setValue的文档,它指出: -
为了使进度对话框按预期工作,您应该首先将此属性设置为QProgressDialog :: minimum(),最后将其设置为QProgressDialog :: maximum();你可以在中间任意多次调用setValue()。
考虑到这一点,它可以正常工作,如第一次将值设置为零,然后是另一个值时可以看到。
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
dlg->setValue(1);
所以,我认为setMinimumDuration的文档也可能链接到这个,但根据文档,当考虑setValue时,行为是正确的。
答案 1 :(得分:3)
QProgressDialog ...估算操作所需的时间 ( 基于步骤的时间 ),并且只显示自己 估计超出minimumDuration()(默认为4秒)。
对话框似乎使用value
属性来估算步骤所需的时间。而且似乎默认情况下没有设置值属性
要使进度对话框按预期工作,您应该首先进行设置 此属性为0,最后将其设置为QProgressDialog :: maximum();
确实,dialog->value()
在我的机器中在构造后返回-1。
总结:
对话框会在插入总金额工作量超过minimumDuration时显示
将值设置为低于QProgressDialog::minimum()
的任何值(默认情况下都是如此)会导致进度条保持隐藏状态。
0 = minimum
。 8秒后,您仍然没有更新该值。这意味着单个项目的处理时间超过8秒。应该显示。0 -> minimum -> maximum
中的值以获得正确的行为。第三种情况,由于值从-1变为1而未设置为0 =最小值,因此无法执行此操作。未指定,在此版本中不显示。8s
执行,就会显示对话框。