我正在使用 QT 4.8.5。我在 QProgressDialog 和 MinimumDuration 上遇到一些问题。
这是文档: http://doc.qt.io/qt-4.8/qprogressdialog.html#minimumDuration-prop 。
1.使用以下代码进行测试。该对话框根本不显示。但文档说:“ 对话框将在 minimumDuration 时间 之后或设置任何进度后弹出”。
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
2.使用以下代码进行测试。该对话框将在 8 秒后显示。但是文档说:“只要设置了任何进度 就会在 minimumDuration 时间或 之后弹出对话框”。虽然行为与文档不同,但我认为当前的行为是可以接受的。
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
3.使用以下代码进行测试。该对话框永远不会显示。但是文档说:“ 对话框将在 minimumDuration 时间之后或在设置任何进度 后立即弹出”。
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 上测试。有什么问题?什么是正确的行为?
最佳答案
确实,信息分散在各处,因此似乎没有任何意义。但是有一个 precious hint in the doc :
该对话框似乎使用 value
属性来估算步骤所需的时间。似乎默认情况下未设置 value 属性
value property :
事实上,dialog->value()
在我的机器中构建后返回 -1。
总结:
QProgressDialog::minimum()
的任何值(默认情况下)会导致进度条保持隐藏状态。 0 = minimum
。 8 秒后,您仍未更新该值。这意味着处理单个项目需要超过 8 秒。应该显示。 0 -> minimum -> maximum
的值以获得正确的行为。您的第三种情况无法执行此操作,因为值从 -1 变为 1,而未设置为 0 = 最小值。未指定,在此版本中不显示。 8s
大,所以只要执行 dlg->setValue(1);
就会显示对话框.