乐于分享
好东西不私藏

Qt 工业软件必备控件:一个 RangeSlider 搞定所有上下限配置

Qt 工业软件必备控件:一个 RangeSlider 搞定所有上下限配置

在 Qt 工业软件开发中,有一类界面需求几乎都会遇到:

设置一个参数范围。

比如:

  • 温度报警上下限
  • 压力安全区间
  • 转速限制范围
  • 良率筛选条件
  • 检测参数范围
  • 数据查询区间

很多项目最后都会变成:

两个输入框。

或者两个 QSlider

一个设置最小值,一个设置最大值。

功能没问题,但体验和维护都会出现问题。

两个控件无法直观看出当前范围。

上下限关系需要额外判断。

大量校验代码散落在业务页面中。

于是一个简单的范围选择,慢慢变成了重复开发。


RangeSlider:专为范围选择设计的 Qt 控件

这次整理了一个通用控件:

RangeSlider 双端范围滑块。

它可以在同一条滑轨上,同时选择:

  • 最小值
  • 最大值

左侧手柄控制下限。

右侧手柄控制上限。

中间高亮区域就是当前选择范围。

例如:

45 ℃  =================  78 ℃

用户拖动时,可以直接看到当前区间变化。

不需要理解两个控件之间的关系。


为什么工业软件更适合使用 RangeSlider?

相比两个普通 QSlider,RangeSlider 将范围逻辑进行了统一封装。

内部处理:

  • 最小值
  • 最大值
  • 当前下限
  • 当前上限
  • 拖动限制
  • 步长控制
  • 单位显示

业务层只需要获取:

int lower = slider->lowerValue();

int upper = slider->upperValue();

然后根据项目需求:

  • 更新设备参数
  • 保存配置
  • 刷新查询条件
  • 修改报警阈值

即可。


集成非常简单

源码已经整理成独立 Qt Demo。

只需要加入:

RangeSlider.h
RangeSlider.cpp

创建控件:

auto *slider = new RangeSlider;

slider->setRange(2090);

slider->setValues(4578);

slider->setStep(1);

slider->setSuffix(QStringLiteral(" ℃"));

监听变化:

slider->setOnRangeChanged(
[](int lower, int upper)
{
    qDebug() << lower << upper;
});

无需修改原有业务结构。


控件内部已经处理这些细节

RangeSlider 基于 Qt 自绘 QWidget 实现。

包含:

  • 双端手柄拖动
  • 下限不能超过上限
  • 上限不能低于下限
  • 范围区域高亮
  • 当前值显示
  • 边界值提示

同时针对实际使用场景做了优化:

当两个值距离过近时,自动处理文字重叠问题。

避免出现:

48   50

两个提示挤在一起的情况。


适用场景

RangeSlider 不绑定具体业务。

只要你的界面需要:

“选择一个最小值和最大值”

都可以直接复用。

例如:

  • 工业设备参数设置
  • PLC 配置工具
  • 测试平台
  • 质量检测系统
  • 数据分析软件
  • 内部调试工具

温度、压力、速度、比例、数量等范围参数,都可以直接接入。



开源源码

源码、Demo 工程、README 已经整理完成。

包含:

  • RangeSlider.h
  • RangeSlider.cpp
  • Qt 示例工程
  • 使用说明

适用于 Qt Widgets 项目,可直接复制集成。

需要源码:

点赞并转发本文,评论区回复「源码」。

一个 RangeSlider,解决 Qt 工业软件中大量上下限配置场景。