QSlider
本文介绍了Qt中的QSlider控件,重点阐述了其核心功能与使用方法。QSlider作为滑动选择数值的交互控件,支持设置方向(水平/垂直)、数值范围、当前值、步长和刻度控制等属性。文中详细说明了valueChanged、sliderMoved等关键信号的使用场景,并提供了与QSpinBox联动的完整示例代码,展示了如何实现两者数值的同步更新。通过该示例,用户可以直观地理解QSlider在实际应用中
QSlider 是 Qt 中用于通过滑动滑块选择数值的交互控件,与 QSpinBox 功能互补(一个侧重滑动选择,一个侧重精确输入)

常用属性和方法
| 属性名 | 类型 | 作用 | 示例 |
|---|---|---|---|
orientation |
Qt::Orientation |
设置滑块方向: 水平( 垂直( |
slider->setOrientation(Qt::Vertical);(垂直滑块) |
minimum |
int |
滑块可选择的最小值(默认 0) | slider->setMinimum(0); |
maximum |
int |
滑块可选择的最大值(默认 99) | slider->setMaximum(100); |
range |
(int min, int max) |
同时设置最小值和最大值(等价于依次调用setMinimum和setMaximum) |
slider->setRange(0, 100);(范围 0-100) |
value |
int |
滑块当前对应的数值(默认在 minimum 和 maximum 之间) |
slider->setValue(50);(设置当前值为 50) |
singleStep |
int |
滑块最小移动幅度(每次拖动或按键盘上下键时的变化量,默认 1) | slider->setSingleStep(5);(每次移动 5) |
pageStep |
int |
点击滑块两侧空白区域时的跳跃幅度(默认 10) | slider->setPageStep(20);(点击一次跳 20) |
tickInterval |
int |
刻度线之间的间隔(如间隔 20 则在 0、20、40... 处显示刻度,默认 0 表示不显示均匀刻度) | slider->setTickInterval(20);(刻度间隔 20) |
tickPosition |
QSlider::TickPosition |
刻度线的显示位置: - - - - |
slider->setTickPosition(QSlider::TicksBelow);(水平滑块刻度在下方) |
invertedAppearance |
bool |
是否反转数值显示: - - |
slider->setInvertedAppearance(true);(视觉反转) |
invertedControls |
bool |
是否反转交互控制: - - |
slider->setInvertedControls(true);(交互反转) |
enabled |
bool |
是否启用滑块(false 时滑块灰显,无法交互)。 |
slider->setEnabled(false);(禁用滑块) |
visible |
bool |
是否可见(false 时隐藏滑块)。 |
slider->setVisible(true);(显示滑块) |
toolTip |
QString |
鼠标悬停时显示的提示文本。 | slider->setToolTip("调节音量"); |
| 功能分类 | 核心方法 | 示例 |
|---|---|---|
| 设置方向 |
|
(水平方向) |
| 设置数值范围 |
|
|
| 设置当前值 |
|
|
| 步长设置 |
|
|
| 刻度控制 |
|
|
信号与槽
QSlider 的信号用于响应滑块位置变化,常用的有:
void valueChanged(int value):当滑块数值变化时发射(无论通过拖动、点击还是代码设置),参数为新数值。void sliderMoved(int value):仅当用户手动拖动滑块时发射(代码设置数值时不发射),参数为当前数值,适合区分用户交互和程序自动更新。void sliderPressed()/void sliderReleased():滑块被按下 / 释放时发射,可用于判断用户开始 / 结束调整。
下面是QSlider 与 QSpinBox 配合使用的例子:滑动滑块时,QSpinBox 同步显示数值;在 QSpinBox 中输入数值时,滑块同步移动到对应位置。
#include <QSlider>
#include <QSpinBox>
#include <QHBoxLayout>
#include <QWidget>
class MyWidget : public QWidget {
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
QHBoxLayout *layout = new QHBoxLayout(this);
// 创建滑块(水平方向,范围 0-100,步长 5)
QSlider *slider = new QSlider(Qt::Horizontal, this);
slider->setRange(0, 100);
slider->setSingleStep(5);
slider->setTickInterval(20);
slider->setTickPosition(QSlider::TicksBelow);
// 创建SpinBox(范围与滑块一致)
QSpinBox *spinBox = new QSpinBox(this);
spinBox->setRange(0, 100);
spinBox->setSingleStep(5);
// 联动:滑块动,SpinBox同步
connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue);
// 联动:SpinBox动,滑块同步
connect(spinBox, QOverload<int>::of(&QSpinBox::valueChanged), slider, &QSlider::setValue);
layout->addWidget(slider);
layout->addWidget(spinBox);
setLayout(layout);
setWindowTitle("Slider与SpinBox联动");
}
};
更多推荐

所有评论(0)