C++ QProgressDialog:关于最小持续时间的问题
我正在使用Qt4.8.5。我在QProgressDialog上遇到了一些问题,时间最短。 以下是文档: 1.使用以下代码进行测试。该对话框根本不显示。但是文档中说:“在最短持续时间后或设置任何进度后,对话框将弹出” 2.使用以下代码进行测试。该对话框将在8秒内显示。但是文档上说:“在最短持续时间后,或者设置任何进度后,就会弹出对话框。”。虽然行为与文档不同,但我认为当前的行为是可以接受的C++ QProgressDialog:关于最小持续时间的问题,c++,windows,qt,qprogressbar,C++,Windows,Qt,Qprogressbar,我正在使用Qt4.8.5。我在QProgressDialog上遇到了一些问题,时间最短。 以下是文档: 1.使用以下代码进行测试。该对话框根本不显示。但是文档中说:“在最短持续时间后或设置任何进度后,对话框将弹出” 2.使用以下代码进行测试。该对话框将在8秒内显示。但是文档上说:“在最短持续时间后,或者设置任何进度后,就会弹出对话框。”。虽然行为与文档不同,但我认为当前的行为是可以接受的 QProgressDialog* dlg = new QProgressDialog("Test", "ca
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
3.使用以下代码进行测试。该对话框永远不会显示。但是文档中说:“在最短持续时间后或设置任何进度后,对话框将弹出。”
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);
我在Windoes 7上测试。问题是什么?正确的行为是什么?我在OS X上用Qt 5测试了这个,得到了相同的结果 仔细查看有关的文档,它指出:- 要使进度对话框按预期工作,首先应将此属性设置为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。。。估计手术所需的时间 (基于步骤的时间),并且仅当 估计值超出最小持续时间()(默认为4秒) 该对话框似乎使用
值
属性来估计步骤所需的时间。而且似乎默认情况下没有设置value属性
:
要使“进度”对话框按预期工作,应首先设置
将此属性设置为0,最后将其设置为QProgressDialog::maximum()
事实上,dialog->value()
在构建后在我的机器中返回-1
总结:
QProgressDialog::minimum()
,会使progressbar保持隐藏状态0=最小值
。8秒后,您仍然没有更新该值。这意味着处理单个项目需要8秒以上。应该显示0->minimum->maximum
中的值,以获得正确的行为。第三种情况下,无法执行此操作,因为值从-1变为1,而没有设置为0=最小值。未指定,在此版本中不显示8s
大,因此只要dlg->setValue(1)就显示对话框代码>被执行
听起来很合理。谢谢@UmNyobe.Hi UmNyobe,我还有一个问题:使用下面的代码进行测试。对话框立即显示,但我将MinimumDuration设置为5。这是个问题吗?QProgressDialog*dialog=新建QProgressDialog(“消息”,“关闭”,1,10);对话框->设置最小持续时间(5);对话框->设置值(1);请记住,持续时间以毫秒为单位。对不起,这是一个输入错误。我的意图是将最短持续时间设置为5000。对话框将立即显示。感谢黑暗骑士。
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
::Sleep(static_cast<DWORD>(1000));
dlg->setValue(1);
QProgressDialog* dialog = new QProgressDialog("Message", "Close", 1, 10);
dialog->setMinimumDuration(5000);
dialog->setValue(0);
dialog->setValue(1);
QProgressDialog* dlg = new QProgressDialog("Test", "cancel", 0, 10);
dlg->setMinimumDuration(8000);
dlg->setValue(0);
dlg->setValue(1);