使用request-try-notifyState流程实现UI控制与状态反馈的完整闭环

1. 前言

在Qt编程时,我们经常会在界面上添加一些按钮,当按钮被点击时,执行某段代码,例如显示一个对话框、关闭窗口,保存文件等等。

这种由UI控件触发某种信号,通过信号槽触发目的代码执行的场景非常多。这种场景下,通常不需要关注目的代码的执行结果,仅仅通过信号触发槽即可完成任务。我们可以用两个单词来描述上述功能场景,即 request-do,即 UI 发出操作请求,触发代码执行。

但是,在需要关注执行结果,并且需要将结果反馈到UI的功能场景下,上述简单的执行流程,就无法满足功能实现的需要了,因为上述代码缺少状态反馈,控制没有闭环。

2. 播放暂停场景

2.1 设计

以播放暂停按钮为例。我们在实现播放暂停按钮时,通常需要满足以下约束条件:

  1. 播放暂停功能,复用同一个按钮
  2. 对于异步操作,要防止同一种功能按钮被重复点击,否则会出BUG(同步执行时,执行结束前按钮不可能被点击,所以同步执行不需要考虑重复点击)

2.2 实现

为了实现播放和暂停复用同一个按钮,需要在点击播放按钮后,发出播放请求信号。对应的槽函数,尝试执行播放操作,如果执行结果有两种:

  • 播放成功
  • 播放失败

播放响应完成后,需要将播放响应的执行结果反馈到UI上:

  • 播放成功后,发出通知,UI模块将按钮切换为暂停按钮样式
  • 播放失败后,发出通知,UI模块将按钮保持原状态,以便用户再次操作。

为了实现异步操作防止重复点击,需要在点击播放按钮后,禁用播放按钮。在异步操作执行完成后,向UI反馈通知执行结果:

  • 播放成功后,发出通知,UI模块使能按钮,将按钮切换为暂停按钮样式
  • 播放失败后,发出通知,UI模块使能按钮,将按钮保持原状态,以便用户再次操作。

上述实现过程可以用三组单词来描述,即:

request-try-notifyState(请求-尝试执行-通知状态/结果)

通过 request-try-notifyState 流程实现了UI控制与状态反馈的完整闭环。

3. 结论

为了实现不同的功能,需要采用不同的实现方法。采用正确的实现方法,虽然不能让你写出惊为天人的代码,但是可以减少BUG产生,防止返工,提高工作效率。


本文原创发布于Qt未来工程师。

相关推荐
誰能久伴不乏5 小时前
QT工业上位机一次「指令静默丢失」的排查
qt·docker·github
扶尔魔ocy1 天前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行并进行态势标绘(四)
qt·opengl·osg
橙橙笔记1 天前
QT安卓软件的制作
android·git·qt·软件
芦芭荞1 天前
QT使用xml模版生成word文档
xml·qt·word
mengzhi啊1 天前
qt把结构体数据存入json文件
qt·json
kaixin_learn_qt_ing1 天前
写入二进制文件(Qt)
qt
尘中远1 天前
QWT7 的科学 Colormap 色彩评估:QwtColorMapPreset 22 种预设的感知均匀性与场景化选
qt·qwt·科学绘图·科学配色
宿州派大星1 天前
Python实战:PyQt5 + OpenCV + Dlib 打造AI桌面应用
人工智能·python·qt
长沙红胖子Qt2 天前
Qt+TiePieHS3开发笔记(二):HS3发送器发出内置波形、直连示波器,示波器检测内置波形Demo
qt·示波器·tiepiehs3·发生器·同步发射和示波器采集
陈年老古董2 天前
PyQt5 入门指南:环境搭建、PyCharm 外部工具配置与登录界面实战
开发语言·qt·pycharm