[英]QProgressDialog: problems about MinimumDuration
我正在使用QT 4.8.5。 我在使用MinimumDuration的QProgressDialog上遇到了一些问题。 以下是文档: http : //doc.qt.io/qt-4.8/qprogressdialog.html#minimumDuration-prop 。
1.使用以下代码进行测试。 根本不显示该对话框。 但文档说:“ 对话框将在最小持续时间之后或设置任何进度后立即弹出 ”。
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上测试。有什么问题? 什么是正确的行为?
我在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时,行为是正确的。
事实上,信息分散在各处,所以似乎毫无意义。 但是文档中有一个宝贵的暗示 :
QProgressDialog ...估计操作将花费的时间( 基于步骤的时间 ),并且仅在该估计值超出minimumDuration()(默认为4秒)时显示。
该对话框似乎使用value
属性来估计步骤所需的时间。 而且似乎没有设置默认值属性
价值属性 :
要使进度对话框按预期工作,您应该首先将此属性设置为0,最后将其设置为QProgressDialog :: maximum();
实际上, dialog->value()
在构建后在我的机器中返回-1。
总结:
一旦插入工作总量超过minimumDuration,就会显示该对话框
将值设置为低于QProgressDialog::minimum()
任何QProgressDialog::minimum()
默认情况下都是这种情况)会导致进度条保持隐藏状态。
0 = minimum
。 8秒后,您仍然没有更新该值。 这意味着单个项目的处理时间超过8秒。 应该显示。 0 -> minimum -> maximum
以获得正确的行为。 第三种情况,由于值从-1变为1而未设置为0 =最小值,因此无法执行此操作。 未指定,在此版本中不显示。 8s
,因此只要dlg->setValue(1);
就会显示对话框dlg->setValue(1);
被执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.