Skip to content

控件组件 - 仪表盘与滑块

Qwt 提供了一系列仪表控件组件,用于数值显示和交互控制。这些控件适用于仪器面板、控制系统、数据监控等场景。

控件类型概览

控件类 说明
QwtDial 仪表盘/刻度盘
QwtKnob 旋钮控件
QwtSlider 滑块控件
QwtThermo 温度计/进度条
QwtWheel 滚轮控件
QwtCounter 数值计数器
QwtCompass 指南针/罗盘

使用方法

控件演示的例子位于:examples/2D/controls,例子截图如下:

Dial Controls

Knob Controls

Slider Controls

1. QwtDial - 仪表盘

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <QwtDial>

QwtDial* dial = new QwtDial();

// 设置范围
dial->setRange(0.0, 360.0);  // 0-360度

// 设置当前值
dial->setValue(90.0);

// 设置刻度步进
dial->setScaleStep(30.0);  // 每30度一个刻度

// 设置刻度位置
dial->setScalePosition(QwtDial::Inside);  // 刻度在内部
// 其他选项:Outside(外部)、NoScale(无刻度)

// 设置指针样式
dial->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow));

// 连接值变化信号
connect(dial, SIGNAL(valueChanged(double)), this, SLOT(onValueChanged(double)));

2. QwtKnob - 旋钮控件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <QwtKnob>

QwtKnob* knob = new QwtKnob();

// 设置范围
knob->setRange(0, 100);

// 设置当前值
knob->setValue(50);

// 设置刻度样式
knob->setScalePosition(QwtKnob::OutsideScale);

// 设置旋钮外观
knob->setKnobStyle(QwtKnob::RaisedStyle);  // 凸起样式
// 其他选项:FlatStyle(平面)、SunkenStyle(凹陷)

// 设置旋钮宽度
knob->setKnobWidth(50);

// 设置鼠标跟踪模式
knob->setTracking(true);  // 拖动时实时更新值

3. QwtSlider - 滑块控件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <QwtSlider>

QwtSlider* slider = new QwtSlider();

// 设置范围
slider->setRange(0.0, 100.0);

// 设置当前值
slider->setValue(30.0);

// 设置方向
slider->setOrientation(Qt::Horizontal);  // 水平滑块
// 或 Qt::Vertical(垂直滑块)

// 设置刻度位置
slider->setScalePosition(QwtSlider::TrailingScale);  // 刻度在后
// 其他选项:LeadingScale、NoScale

// 设置滑块样式
slider->setHandleSize(QSize(10, 20));  // 滑块手柄大小

// 设置步进值
slider->setSingleStep(1.0);
slider->setPageStep(10.0);

4. QwtThermo - 温度计

 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
#include <QwtThermo>

QwtThermo* thermo = new QwtThermo();

// 设置范围
thermo->setRange(0.0, 100.0);

// 设置当前值
thermo->setValue(75.0);

// 设置方向
thermo->setOrientation(Qt::Vertical);

// 设置填充颜色
thermo->setFillBrush(QBrush(Qt::red));

// 设置管道宽度
thermo->setPipeWidth(10);

// 设置刻度位置
thermo->setScalePosition(QwtThermo::TrailingScale);

// 设置警报级别
thermo->setAlarmLevel(80.0);  // 80度警报
thermo->setAlarmBrush(QBrush(Qt::darkRed));

5. QwtWheel - 滚轮控件

 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
#include <QwtWheel>

QwtWheel* wheel = new QwtWheel();

// 设置范围
wheel->setRange(0, 360);

// 设置当前值
wheel->setValue(180);

// 设置方向
wheel->setOrientation(Qt::Horizontal);

// 设置滚轮宽度
wheel->setWheelWidth(30);

// 设置边框宽度
wheel->setBorderWidth(2);

// 设置步进值
wheel->setSingleStep(1);
wheel->setPageStep(15);

// 设置鼠标跟踪
wheel->setTracking(true);

6. QwtCounter - 数值计数器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <QwtCounter>

QwtCounter* counter = new QwtCounter();

// 设置范围
counter->setRange(0, 9999);

// 设置当前值
counter->setValue(100);

// 设置步进按钮
counter->setNumButtons(3);  // 3个步进按钮

// 设置步进值
counter->setSingleStep(1);
counter->setPageStep(100);

// 设置循环模式
counter->setWrap(true);  // 到达边界时循环

7. QwtCompass - 指南针

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <QwtCompass>

QwtCompass* compass = new QwtCompass();

// 设置范围(角度)
compass->setRange(0.0, 360.0);

// 设置当前方向
compass->setValue(45.0);  // 北偏东45度

// 设置玫瑰图样式
compass->setRose(new QwtSimpleCompassRose());

// 设置刻度标注
compass->setLabelMap({
    {0, "N"}, {90, "E"}, {180, "S"}, {270, "W"}
});

// 设置指针
compass->setNeedle(new QwtCompassWindArrow());

核心共性方法

所有控件都继承自 QwtAbstractSlider,共享以下方法:

方法 说明
setRange() 设置数值范围
setValue() 设置当前值
value() 获取当前值
setSingleStep() 设置单步步进
setPageStep() 设置页步步进
setTracking() 设置鼠标跟踪
setWrapping() 设置循环模式

控件使用建议

  • 仪表盘适合角度或方向显示
  • 旋钮适合参数调节
  • 滑块适合线性范围调整
  • 温度计适合进度或温度显示
  • 滚轮适合连续平滑调节

相关示例

  • 控件演示:examples/2D/controls
  • 指南针:examples/2D/dials