gpt4 book ai didi

c++ - QProgressDialog : problems about MinimumDuration

转载 作者:可可西里 更新时间:2023-11-01 14:44:53 30 4
gpt4 key购买 nike

我正在使用 QT 4.8.5。我在带有 MinimumDuration 的 QProgressDialog 上遇到了一些问题。这是文档: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);

我在 Windows 7 上测试。有什么问题?什么是正确的行为?

最佳答案

的确,信息散落四处,所以看起来毫无意义。但是有一个precious hint in the doc :

QProgressDialog ... estimates the time the operation will take (based on time for steps), and only shows itself if that estimate is beyond minimumDuration() (4 seconds by default).

该对话框似乎使用 value 属性来估算步骤所需的时间。并且默认情况下似乎未设置 value 属性

value property :

For the progress dialog to work as expected, you should initially set this property to 0 and finally set it to QProgressDialog::maximum();

确实,dialog->value() 在构造后在我的机器中返回 -1。

总结:

  1. 不设置值是个问题。有时您必须设置值才能使其发挥作用。
  2. 一旦提示总工作量将超过 minimumDuration,就会显示对话框

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

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

关于c++ - QProgressDialog : problems about MinimumDuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33995243/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com