QSlider 是 Qt 中用于通过滑动滑块选择数值的交互控件,与 QSpinBox 功能互补(一个侧重滑动选择,一个侧重精确输入)

常用属性和方法

属性名 类型 作用 示例
orientation Qt::Orientation

设置滑块方向:

水平(Qt::Horizontal

垂直(Qt::Vertical

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

刻度线的显示位置:

NoTicks:不显示刻度;

TicksAbove/TicksBelow(水平滑块):刻度在滑块上方 / 下方;

TicksLeft/TicksRight(垂直滑块):刻度在滑块左侧 / 右侧;

TicksBothSides:两侧都显示刻度。

slider->setTickPosition(QSlider::TicksBelow);(水平滑块刻度在下方)
invertedAppearance bool

是否反转数值显示:

false(默认):水平滑块左小右大,垂直滑块下小上大;

true:水平滑块左大右小,垂直滑块下大上小(数值逻辑不变,仅视觉反转)。

slider->setInvertedAppearance(true);(视觉反转)
invertedControls bool

是否反转交互控制:

false(默认):上 / 右箭头增大数值,下 / 左箭头减小;

true:上 / 右箭头减小数值,下 / 左箭头增大(与 invertedAppearance 配合使用)。

slider->setInvertedControls(true);(交互反转)
enabled bool 是否启用滑块(false 时滑块灰显,无法交互)。 slider->setEnabled(false);(禁用滑块)
visible bool 是否可见(false 时隐藏滑块)。 slider->setVisible(true);(显示滑块)
toolTip QString 鼠标悬停时显示的提示文本。 slider->setToolTip("调节音量");
功能分类 核心方法  示例
设置方向

void setOrientation(Qt::Orientation orientation):设置方向(Qt::Horizontal 水平,Qt::Vertical 垂直);

Qt::Orientation orientation() const:获取当前方向。

slider->setOrientation(Qt::Horizontal);

(水平方向)

设置数值范围

void setMinimum(int min):最小值;

void setMaximum(int max):最大值;

void setRange(int min, int max):同时设置范围。

slider->setRange(0, 100);(范围 0-100)

设置当前值

void setValue(int value):设置滑块位置对应的数值;

int value() const:获取当前数值。

slider->setValue(50);(设置当前值为 50)

int cur = slider->value();(获取当前值)

步长设置

void setSingleStep(int step):滑块每次最小移动幅度(默认 1,如步长 5 则每次移动 5);

void setPageStep(int step):点击滑块两侧区域时的移动幅度(默认 10)。

slider->setSingleStep(5);(步长 5)

slider->setPageStep(20);(页面步长 20)

刻度控制

void setTickInterval(int interval):刻度间隔(如间隔 20 则 0、20、40... 处显示刻度);

void setTickPosition(TickPosition position):刻度位置(如滑块上方、下方、两侧)。

slider->setTickInterval(20);(刻度间隔 20)

slider->setTickPosition(QSlider::TicksBelow);(水平时刻度在下方)

信号与槽

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联动");
    }
};

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐