QProgressDialog:关于MinimumDuration的问题
QProgressDialog: problems about MinimumDuration
我使用的是QT 4.8.5。我在使用MinimumDuration的QProgressDialog上遇到了一些问题。以下是文档:http://doc.qt.io/qt-4.8/qprogressdialog.html#minimumDuration-道具。
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上测试。有什么问题?正确的行为是什么?
事实上,信息分散在各处,因此似乎毫无意义。但文档中有一个宝贵的提示:
QProgress对话框。。。估计手术所需的时间(基于步骤的时间),并且仅当估计值超过minimumDuration()(默认为4秒)。
该对话框似乎使用value
属性来近似步骤所需的时间。而且似乎值属性默认情况下没有设置
value属性:
为了使进度对话框按预期工作,您应该首先设置此属性设置为0,并最终将其设置为QProgressDialog::maximum();
事实上,dialog->value()
在构建之后在我的机器中返回-1。
总结:
- 不设置值是个问题。您有时必须设置值才能使其工作
-
一旦插入总工作量将花费超过最小持续时间,就会显示对话框
-
默认情况下,将值设置为低于
QProgressDialog::minimum()
的任何值都会导致进度条保持隐藏状态。 - 第二种情况将值设置为
0 = minimum
。8秒后,您仍未更新该值。这意味着单个项目的处理需要超过8秒。应该显示 - 您应该修改
0 -> minimum -> maximum
中的值以获得正确的行为。在第三种情况下,无法执行此操作,因为值从-1到1,而没有设置为0=最小值。未指定,在此版本中不显示 - 您的第4种情况意味着"第一次处理花费了0秒,第二次尚未完成"。所以最小持续时间行为开始了。应该显示出来
-
现在第一个任务(情况5)有一秒的持续时间,对话框近似为10个任务需要10s,这比
8s
大,因此一旦执行dlg->setValue(1);
,就会显示对话框
我在OS X上用Qt 5进行了测试,得到了相同的结果
仔细查看setValue的文档,它指出:-
为了使进度对话框按预期工作,您应该首先将此属性设置为QProgressDialog::minimum(),最后将其设置为QPProgressDialog::maximum();您可以调用setValue()任意次数。
考虑到这一点,它可以按预期工作,正如您首先将值设置为零,然后再设置另一个值时所看到的那样。
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
dlg->setValue(1);
因此,我认为setMinimumDuration的文档可能也应该链接到这一点,但根据文档,当考虑到setValue时,行为是正确的。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题