繁体   English   中英

QProgressDialog:有关MinimumDuration的问题

[英]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。

总结:

  1. 不设定价值是一个问题。 必须有时设置值才能使其工作。
  2. 一旦插入工作总量超过minimumDuration,就会显示该对话框

  3. 将值设置为低于QProgressDialog::minimum()任何QProgressDialog::minimum()默认情况下都是这种情况)会导致进度条保持隐藏状态。

  4. 您的第二种情况将值设置为0 = minimum 8秒后,您仍然没有更新该值。 这意味着单个项目的处理时间超过8秒。 应该显示。
  5. 应该修改0 -> minimum -> maximum以获得正确的行为。 第三种情况,由于值从-1变为1而未设置为0 =最小值,因此无法执行此操作。 未指定,在此版本中不显示。
  6. 你的第四种情况意味着“第一次处理需要0秒,第二种情况尚未完成”。 所以minimumDuration行为开始了。应该显示。
  7. 现在第一个任务有一个第二个持续时间(案例5) ,对话框近似 10个任务将花费10s,大于8s ,因此只要dlg->setValue(1);就会显示对话框dlg->setValue(1); 被执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM