Qt扫盲-QFutureWatcher理论总结

QFutureWatcher理论总结

一、概述

QFutureWatcher类允许我们使用信号槽的方式去监控QFuture。

QFutureWatcher提供关于QFuture的信息和通知。使用 setFuture() 函数开始监视特定的QFuture。

future()函数通过setFuture()返回 QFuture 集合。

为了方便起见,QFuture的几个函数也可以在 QFutureWatcher 中使用:progressValue(), progressMinimum(), progressMaximum(), progressText(), isStarted(), isFinished(), isRunning(), isCanceled(), isPaused(), waitForFinished(), result() 和 resultAt()。cancel()、setPaused()、pause()、resume() 和 togglePaused() 函数是QFutureWatcher中的槽函数。

二、转态

状态变化通过 started()、finished()、canceled()、paused()、resumed()、resultReadyAt() 和 resultsReadyAt() 信号来报告。进度信息由 progressRangeChanged()、void progressValueChanged() 和 progressTextChanged() 信号提供。

节流控制由 setPendingResultsLimit() 函数提供。当挂起的 resultReadyAt() 或 resultsReadyAt() 信号的数量超过限制时,future表示的计算将自动进行节流。一旦挂起的信号数量下降到限制以下,计算将恢复。

示例:开始计算并在计算结束时获得一个槽回调:

cpp 复制代码
  // Instantiate the objects and connect to the finished signal.
  MyClass myObject;
  QFutureWatcher<int> watcher;
  connect(&watcher, SIGNAL(finished()), &myObject, SLOT(handleFinished()));

  // Start the computation.
  QFuture<int> future = QtConcurrent::run(...);
  watcher.setFuture(future);

请注意,并非所有正在运行的异步计算都可以取消或暂停。例如,QtConcurrent::run() 返回的 future 不能被取消;但是QtConcurrent::mappedReduced() 返回的 future 可以。

QFutureWatcher<void> 被指定为不包含任何结果获取函数。任何 QFuture 也可以被 QFutureWatcher 观测到。如果只需要状态或进度信息,这是有用的;而不是实际的结果数据。 QFutureWatcher 就是监测的,并不是去表示结果的。

相关推荐
学习,学习,在学习2 小时前
Modbus TCP同步通信方式实现异步级效率
网络·c++·qt·网络协议·tcp/ip·qt5
学习,学习,在学习1 天前
Modbus TCP 协议深度解析与 Qt 实战指南
网络·c++·qt·tcp/ip·modbus·qt5
Shadow(⊙o⊙)4 天前
Qt-Lambda捕获使用+阶段性综合使用
开发语言·c++·qt·qt5
学习,学习,在学习7 天前
Qt 串口通讯架构
开发语言·c++·qt·架构·qt5
学习,学习,在学习14 天前
Q工控仪器程序框架设计详解(工控)
c++·qt·架构·qt5
IOT那些事儿1 个月前
Qt5 VSCode调试
c++·vscode·mingw·qt5
IOT那些事儿1 个月前
Windows PowerShell配置Qt5编译运行环境
windows·powershell·qt5
屯子来了2 个月前
window11 qt5.14.1 msvc2017 编译OpenDDS-3.33.0
c++·qt5·opendds·msvc2017
艾莉丝努力练剑3 个月前
【QT】常用控件(一):初识控件,熟悉QWidget
android·linux·数据库·qt·学习·mysql·qt5
艾莉丝努力练剑4 个月前
【QT】信号与槽
linux·开发语言·c++·人工智能·windows·qt·qt5