QProgressDialog使用时不显示的可能问题 #Qt #C++
来源:互联网 发布:日本尼达利淘宝店 编辑:程序博客网 时间:2024/06/03 21:20
QProgressDialong是Qt提供的用于显示各类耗时较长的操作进度,
而不至于让程序看上去假死了一样,他继承自QDialog。
example:http://doc.qt.io/qt-4.8/qprogressdialog.html#labelText-prop
但是在测试中会出现Dialog不显示,程序依旧进入假死状态,在网上也查阅不到问题所在。
不显示的原因是QProgressDialog有一个智能延迟,默认一切短于4秒的操作都不显示Dialog,因为测试时的数据量往往很小,从而导致了问题。
文档是这么说的:
A common problem with progress dialogs is that it is difficult to know when to use them; operations take different amounts of time on different hardware.QProgressDialog offers a solution to this problem: it estimates the time the operation will take (based on time for steps), and only shows itself if that estimate is beyondminimumDuration() (4 seconds by default).
所以只要使用
void setMinimumDuration(int ms)
将这个值改小或者为0,就可以了。下面是代码:
void MainWindow::sendAll(){ int count = 0; for(unsigned int i=0;i<ARRAY.size();i++) { count+=ARRAY.at(i).size(); } int num = 0; QProgressDialog progress_dialog("Sending values to Units...","Cancel",0,count,this); progress_dialog.setWindowModality(Qt::WindowModal); progress_dialog.setMinimumDuration(0); progress_dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint); progress_dialog.setFixedSize(500,120); progress_dialog.setWindowTitle("Sending values to Units..."); for(unsigned int m = 0; m<ARRAY.size();m++) { int i = 0; QString ip = ""; QString port = ""; QString unit_id = ""; while(ui->activeUnitWidget->item(m)->text()[i]!=':') { ip.append(ui->activeUnitWidget->item(m)->text()[i]); i++; } i++; while(ui->activeUnitWidget->item(m)->text()[i]!='[') { port.append(ui->activeUnitWidget->item(m)->text()[i]); i++; } i++; while(ui->activeUnitWidget->item(m)->text()[i]!=']') { unit_id.append(ui->activeUnitWidget->item(m)->text()[i]); i++; } vector<addr_value>::iterator innerIter; for(innerIter=ARRAY.at(m).begin(); innerIter!=ARRAY.at(m).end() ; innerIter++) { progress_dialog.setLabelText("Sending values to.."+ui->activeUnitWidget->item(m)->text()); M_Client A(ip.toLatin1(),port.toInt(),unit_id.toInt()); A.Connect(); A.Modbus_sender_single(num, innerIter->addr , innerIter->value); A.Close(); progress_dialog.setValue(++num); //Sleep(40); } }}
0 0
- QProgressDialog使用时不显示的可能问题 #Qt #C++
- qt中对任务繁忙时QProgressDialog的使用
- QProgressDialog(进度条)的使用
- QProgressDialog 快速实现进度的显示界面
- Qt QColorDialog QErrorMessage QFileDialog QFontDialog QProgressDialog 等对话框的使用测试
- QT中不显示图标的问题
- 解决安装好node但可能不能使用的问题——用npm检查不显示node的问题
- 电池显示的剩余可能不准确
- qt汉字显示的问题 && qt中不显示标题栏的方法
- 嵌入式 交叉编译Qt 时 可能出现的问题
- Andrnoid 使用Glide时ImageView不显示的问题
- 使用matplotlib时pyplot.show()不显示图像的问题
- Linux下使用QT,终端不显示输出的解决办法
- 使用eWebEditor 不显示内容的问题
- Qt movie图片发布时动画效果不显示问题
- 解决WebView加载离线HTML时白屏、黑屏以及可能不显示的问题
- 使用shareSDK时可能遇到的问题
- 使用mybatis时可能出现的问题
- java this
- 网格简化
- 多用户同时处理同一条数据解决办法
- Eclipse安装Pydev
- Groovy 解析json和闭包的使用
- QProgressDialog使用时不显示的可能问题 #Qt #C++
- OPENGL基本了解(十四) (光照基本数据)
- Volley 图片加载相关源码解析
- Android SDK 更新太慢问题
- iptables的man手册以及使用
- CentOS网络设置 couldn't resolve host 'mirrorlist.centos.org问题解决
- 点法向量和面法向量(1)
- 关于回调函数的几个例子
- C++设计模式-Prototype原型模式