QT 槽函数使用记录 —— 进度条弹窗事件
来源:互联网 发布:centos关闭selinux 编辑:程序博客网 时间:2024/05/18 00:02
在开发测评软件benchmark的过程中,有这样一个场景: 在测试窗口中选择不同的测试项,然后点击测试按钮,系统弹出新的窗口,窗口中的双进度条不断更新(单项进度条在上,总测评进度条在下)。
起初我是这样想的:在测试按钮的槽函数中先让进度条窗口show出来,然后调用进度条更新函数。简单的说就是这样:
void slotFunc(){ progressWin->show(); testClass->testStart(); // testClass->testStart() calls progresswin->progressUpdate();}
但是这样的结果是窗体弹出后,进度条不显示,同时进度条更新的函数不断发挥作用,从qt creator的log中可以看出value值不断地更新,一直到100%进度条才显示出来。
如下图所示:
然后,我设想将
progresswin->progressUpdate();
变成另一个信号发送,触发progressUpdate的槽函数,或者,测试按钮的click信号对应两个槽函数show(), progressUpdate()。他们的效果是一样的。 虽然一个信号可以对应多个槽函数,但是执行的次序与效果却没有保障。在读了更多关于信号和槽的工作机制后让我意识到,最好是一个信号对应一个槽函数,一个槽函数仅完成一项功能。
于是,我将方案换成这样:
void slotFunc(){progressWin->show();timer->setSingleShot(true);timer->start(10);// testStart() calls progressUpdate()connect(timer,SIGNAL(timeout()),progressWin,SLOT(testClass->testStart());}
在我解决这个问题后不久,我的同事提出了他的方案: 让testClass继承QThread,将testStart写入
virtual void run();
中,在测试按钮的click函数中调用testClass的start()
,它继承于[slot] void QThread::start(Priority priority = InheritPriority)
。由此唤醒run函数线程,这算是另一种形式的触发。达到了同样的效果。阅读全文
0 0
- QT 槽函数使用记录 —— 进度条弹窗事件
- QT学习记录-进度条:
- Qt学习11——进度条QProgressBar
- QT事件处理,鼠标事件,按键键盘事件,定时器,进度条。
- Qt事件处理(四)——重写event()函数
- QT paintevent 事件, update()槽函数
- Qt常用函数 记录
- Qt学习记录4——mainwindow的布局使用
- Qt类使用记录
- qt使用记录
- Qt Creator使用记录
- Qt学习记录--03 Qt的信号槽的使用
- qt鼠标事件使用
- QT学习 第一章:基本对话框--使用进度条
- QT中怎么设置和使用进度条
- easyui进度条函数使用例子
- Qt+openGL学习记录(1)`Qt中openGL的三个重要事件处理函数的调用规则`
- Qt学习——进度条QProgressBar/QProgressDialog类
- syntax error near unexpected token `-mavx,'
- [NOIP模拟][链表]裁剪表格
- 多项式相关 转自Miskcoo
- SQL 中replace into
- 成绩练习
- QT 槽函数使用记录 —— 进度条弹窗事件
- 南阳理工_74小学生算数
- Linux日常使用的技巧分享
- Spring读书学习笔记(二)——Spring boot
- DNS和FTP
- Spring boot Jar 通过服务方式部署
- hadoop集群优化
- Judge Route Circle(leetcode)
- finalize()用途何在?