控件组件 - 仪表盘与滑块¶
Qwt 提供了一系列仪表控件组件,用于数值显示和交互控制。这些控件适用于仪器面板、控制系统、数据监控等场景。
控件类型概览¶
| 控件类 | 说明 |
|---|---|
QwtDial |
仪表盘/刻度盘 |
QwtKnob |
旋钮控件 |
QwtSlider |
滑块控件 |
QwtThermo |
温度计/进度条 |
QwtWheel |
滚轮控件 |
QwtCounter |
数值计数器 |
QwtCompass |
指南针/罗盘 |
使用方法¶
控件演示的例子位于:examples/2D/controls,例子截图如下:



1. QwtDial - 仪表盘¶
QwtDial 是一个带指针的圆形仪表面板,用来指示当前值,适合角度、方向、转速一类的驾驶舱式显示。数值范围由继承来的 setScale() 设定,刻度间隔由 setScaleStepSize() 提示;外观主要由指针决定:setNeedle() 挂入指针对象(如 QwtDialSimpleNeedle,有 Arrow 箭头和 Ray 射线两种风格),setMode() 则决定旋转的是指针还是刻度盘。数值本身通过继承来的 setValue() 设置,变化经 valueChanged() 信号发出。下面是典型的配置流程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
2. QwtKnob - 旋钮控件¶
QwtKnob 模拟一个可用鼠标转动的实体旋钮,常用于音响或仪器面板上的参数微调。setKnobStyle() 选择表面明暗风格(Flat / Raised / Sunken / Styled),setKnobWidth() 决定旋钮直径,当前值由 setMarkerStyle() 设定的标记指示,setTracking(true) 则让拖动过程中实时发出数值,示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
3. QwtSlider - 滑块控件¶
QwtSlider 是 Qwt 版的线性滑块,适合在一个范围内连续调节数值。setOrientation() 在 Qt::Horizontal 与 Qt::Vertical 之间选择方向,setScalePosition() 决定刻度画在槽的哪一侧(LeadingScale、TrailingScale 或 NoScale),setHandleSize() 调整手柄尺寸,下面的例子演示了常用配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
4. QwtThermo - 温度计¶
QwtThermo 把数值显示为一根管道里的液柱,是温度、液位、进度类指示的自然选择。setOrientation() 决定竖直还是水平摆放,setFillBrush() 设置液柱填充色,setPipeWidth() 设定管道宽度,setAlarmLevel() 与 setAlarmBrush() 则让数值越过报警阈值后切换成警告颜色:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
5. QwtWheel - 滚轮控件¶
QwtWheel 模拟一个用拇指搓动的机械滚轮,适合连续平滑地调节数值,比滑块更省面板空间。setRange() 定义工作区间,setWheelWidth() 设定滚轮宽度,setSingleStep() 决定每格步进量,setPageStepCount() 决定一次翻页跨越多少个单步,setMass() 则赋予它松手后继续旋转的飞轮效果;setTracking(true) 让拖动过程中实时发出数值,示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
6. QwtCounter - 数值计数器¶
QwtCounter 把可编辑的数值显示框和若干组增减按钮组合在一起,用于精确的数值输入。setNumButtons() 决定显示框两侧各摆几组步进按钮,setSingleStep() 设置第一组按钮单击一次的增减量,setIncSteps() 为其余按钮指定更大的步进倍数,setWrapping(true) 则让数值到达边界后回绕到另一端:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
7. QwtCompass - 指南针¶
QwtCompass 是派生自 QwtDial 的方向指示盘,可以在圆形刻度之上叠加罗盘玫瑰。setRose() 挂入玫瑰图形(如 QwtSimpleCompassRose),N/E/S/W 等方位字母来自 QwtCompassScaleDraw 的标签映射(用 setScaleDraw() 挂入),setNeedle() 则可以换成 QwtCompassWindArrow 这样的风向箭头指针,下面的例子给出完整配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
核心共性方法¶
七个控件并非都继承同一个基类:QwtDial、QwtKnob、QwtSlider 派生自 QwtAbstractSlider(其基类又是 QwtAbstractScale),QwtThermo 只派生自 QwtAbstractScale,而 QwtWheel 与 QwtCounter 是独立的 QWidget 子类,只是提供了相似的取值接口。各方法的可用于范围如下表:
| 方法 | 可用控件 | 说明 |
|---|---|---|
setScale(double lower, double upper) |
Dial / Knob / Slider / Thermo | 设置数值范围与刻度边界(来自 QwtAbstractScale) |
setRange(double min, double max) |
Wheel / Counter | 设置数值范围 |
setValue(double) / value() |
全部七个控件 | 设置/获取当前值 |
setSingleSteps(uint) / setPageSteps(uint) |
Dial / Knob / Slider | 键盘/滚轮输入的单步与翻页步数(来自 QwtAbstractSlider) |
setSingleStep(double) |
Wheel / Counter | 单步步进量 |
setPageStepCount(int) |
Wheel | 一次翻页跨越的单步个数 |
setTracking(bool) |
Dial / Knob / Slider / Wheel | 拖动过程中实时发出数值 |
setWrapping(bool) |
Dial / Knob / Slider / Wheel / Counter | 到达边界时循环回绕 |
提示 — 控件使用建议
- 仪表盘适合角度或方向显示
- 旋钮适合参数调节
- 滑块适合线性范围调整
- 温度计适合进度或温度显示
- 滚轮适合连续平滑调节
示例 — 相关示例
- 控件演示:
examples/2D/controls- 指南针:
examples/2D/dials- 飞轮效果滚轮:
examples/2D/radio
控件演示的更多截图如下:


