关闭

QT 槽函数使用记录 —— 进度条弹窗事件

标签: qt软件信号槽
217人阅读 评论(0) 收藏 举报
分类:

在开发测评软件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
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

QT paintevent 事件, update()槽函数

一界面重载函数 使用方法: 1在头文件里定义函数 protected: void paintEvent(QPaintEvent *event); 2 在CPP内直接重载 ...
  • xj626852095
  • xj626852095
  • 2013-08-19 09:25
  • 3248

QT 子窗口—>主窗口 信号和槽的交互

背景: 要实现的功能: 主窗口MainWindow中打开子窗口UdpChannel后,子窗口发送一个信号,传递一个QString,要求在主窗口的QTextBrowser中打印出来!(比如操作的日志信息...
  • jinzijunjun
  • jinzijunjun
  • 2016-06-15 08:59
  • 5748

QT中 QComboBox 类中常见函数与信号的使用

QComboBox插件是一个集按钮和下拉菜单于一体的插件。 QComboBox在占用最小屏幕空间的情况下为用户提供一个下拉菜单选项。 QComboBox在显示当前选项的同时还弹出一系列可选...
  • sbisyju
  • sbisyju
  • 2013-03-20 16:28
  • 19602

Android自定义弹窗进度条

Android自定义进度条主要是修改ProgressBar的style,弹窗则是在Dialog里显示ProgressBar。 直接上代码。         在style.xml里加入如下代码: ...
  • viviwen123
  • viviwen123
  • 2013-03-25 15:19
  • 1717

Qt学习11——进度条QProgressBar

在处理长时间任务时,有事需要提供进度条显示当前任务进度。Qt中进度条的显示方式有2种,一种是控件方式:QProgressBar;一种是针对慢速过程的对话框方式:QProgressDialog。
  • u014266675
  • u014266675
  • 2017-06-30 10:42
  • 555

如何在VS2013+QT5.3环境下使用自定义信号与槽函数

https://www.cnblogs.com/dada-911911/p/3825079.html 图1中标注出来的是VS2013中的QT界面设计师文件,双击默认打开的是Qt设计师工具...
  • cocoasprite
  • cocoasprite
  • 2017-11-22 00:00
  • 137

Qt多线程之一:子线程中创建的对象不应再其他线程中被调用,包括使用槽函数的形式

#ifndef WORKTHREAD_H #define WORKTHREAD_H #include #include "DataBaseObject.h" #include "HttpObject...
  • u013148209
  • u013148209
  • 2016-06-25 09:34
  • 1484

Qt学习——进度条QProgressBar/QProgressDialog类

两种进度条显示: QProgressBar和QProgressDialog 下面例子展示两种进度条:       代码: 头文件dialog.h中: [cpp] view ...
  • ns708865818
  • ns708865818
  • 2016-05-18 11:25
  • 260

Qt学习——进度条QProgressBar/QProgressDialog类 .

两种进度条显示: QProgressBar和QProgressDialog 下面例子展示两种进度条:       代码: 头文件dialog.h中: view plainc...
  • jingzhesiye
  • jingzhesiye
  • 2011-08-04 09:58
  • 11367

QT事件处理,鼠标事件,按键键盘事件,定时器,进度条。

本篇博客是博主原创请尊重,博主,转载需要加上转载地址和转载连接
  • li491093957
  • li491093957
  • 2016-10-19 16:08
  • 465
    个人资料
    • 访问:327277次
    • 积分:8806
    • 等级:
    • 排名:第2521名
    • 原创:574篇
    • 转载:13篇
    • 译文:0篇
    • 评论:36条
    我的链接
    最新评论