Qt学习笔记(二十六):QSlider 的常用方法


一、QSlider 的构造函数:

1、QSlider(QWidget * parent = 0):创建一个滑块,指定其父对象。默认垂直方向。

2、QSlider(Qt::Orientation orientation, QWidget * parent = 0):创建指定方向的滑块

1
2
3
4
5
6
7
8
9
    // 创建一个水平的滑块
    QSlider *horizontalSlider = new QSlider(Qt::Horizontal, this);
    // 设定滑块的起始位置,以及宽和高
    horizontalSlider->setGeometry(10, 10, 100, 20);
   
    // 创建一个垂直的滑块
    QSlider *verticalSlider = new QSlider(Qt::Vertical, this);
    // 设定滑块的起始位置,以及宽和高
    verticalSlider->setGeometry(10, 50, 20, 100);

二、QSlider 的常用方法 和 常用属性:

1、设置 slider 的方向:

1
2
3
4
5
6
    // 设置滑块为水平方向
    // setOrientation 属于槽函数方法
    verticalSlider->setOrientation(Qt::Horizontal);

    // 通过对应的属性获取 slider 的方向
    int orien = verticalSlider->orientation();

2、设置最大值和最小值:

1
2
3
4
5
6
7
8
9
10
11
    // 设置最大值
    horizontalSlider->setMaximum(50);
   
    // 设置最小值
    horizontalSlider->setMinimum(20);

    // 获取最大值
    int max = horizontalSlider->maximum();
   
    // 获取最小值
    bool min = horizontalSlider->minimum();

还可以通过槽函数方法 void setRange(int min, int max) 设置 slider 的最大值和最小值。

3、设置移动的步长:

slider 提供了两个自然的步长;较大的步长用 pageStep 表示,相当于按下键盘上的 PageDown 和 PageUp;较小的步长用 singleStep 表示,相当于按下键盘上的上、下键;

设置 pageStep 步长:即移动每页的步长

1
2
3
4
5
    // 设置移动每页的步长,滑块提供的两个自然步长中较大的那一个,相当于键盘上的 PageUp 和 PageDown;
    horizontalSlider->setPageStep(10);
   
    // 获取 每页的步长
    int step = horizontalSlider->pageStep();

设置 singleStep 步长:即单步移动的步长

1
2
3
4
5
    // 设置移动单步的步长,滑块提供的两个自然步长中较小的那一个,相当于键盘上的上、下箭头;
    horizontalSlider->setSingleStep(2);
   
    // 获取 单步的步长
    int step =horizontalSlider->singleStep();

4、设置 slider 的位置:

1
2
3
4
5
6
    // 设置滑块的位置:该方法与 setValue() 槽函数功能相同
    horizontalSlider->setSliderPosition(33);
   
    // 获取滑块的位置
    int pos = horizontalSlider->sliderPosition();
    qDebug() << QString::number(pos);

5、设置 slider 的值:

1
2
3
4
5
6
7
    // 设置 slider 的值:
    // 当 slider 的值改变时,也会改变 sliderPosition 的值(即 slider 的位置改变)
    // setValue() 是槽函数,不是公共方法;
    horizontalSlider->setValue(33);
 
    // 获取 slider 的值
    int value = horizontalSlider->value();

6、设置 slider 的值进行反转: 即如果是水平方向的 slider,默认情况下,最小值在最左边,最大值在最右边,但是设置 slider 的值进行反转后,最小值变到了最右边,最大值改到了最左边:

1
2
    // 设置 slider 的值进行反转:
    horizontalSlider->setInvertedAppearance(true);

如果是垂直方向的 slider,默认最小值在底部,最大值在顶部;设置 slider 的值进行反转后,最大值在底部,最小值变到了顶部。

可以通过 invertedAppearance 属性获取 slider 值是否进行反转了:

1
    bool isInvertedAppearance = horizontalSlider->invertedAppearance();

7、设置是否启用滑块追踪:

1
2
3
4
5
6
7
8
    // 设置是否启动滑块追踪:true 表示启动追踪;false 表示禁用追踪;
    // 如果启用了滑块追踪,则滑块在拖动过程中会一直触发 valueChanged 信号;
    // 如果禁用了滑块追踪,则滑块在拖动过程中不会触发 valueChanged 信号,
    // 只有在用户释放滑块时,才触发 valueChanged 信号。
    horizontalSlider->setTracking(true);

    // 可以通过 hasTracking 属性获取是否启用了追踪:
    bool isTrack = horizontalSlider->hasTracking();

三、QSlider 的信号:

1、void actionTriggered(int action):表示当 slider 有动作发生时触发的信号。slider 的动作有 SliderSingleStepAdd、SliderSingleStepSub、SliderPageStepAdd、SliderPageStepSub、SliderToMinimum、SliderToMaximum 和 SliderMove。当信号发出时,sliderPosition 已经根据动作进行了调整,但是值还没有传播(这意味着 valueChanged() 信号还没有发出),并且可视化显示还没有更新。因此,在连接到此信号的槽中,您可以根据操作和滑块的值自己调用 setSliderPosition() 来安全地调整任何操作。

2、void rangeChanged(int min, int max):当 slider 的取值范围发生变化时触发的信号;其中参数 min 表示新的最小值,参数 max 表示新的最大值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
   
    // 创建一个水平的滑块
    horizontalSlider = new QSlider(Qt::Horizontal, this);
    // 设定滑块的起始位置,以及宽和高
    horizontalSlider->setGeometry(10, 10, 100, 20);

    // 当 slider 的取值范围发生变化时触发的信号
    connect(horizontalSlider, &QSlider::rangeChanged, [=](int min, int max){
        qDebug() << "新的最小值:" << QString::number(min);
        qDebug() << "新的最大值:" << QString::number(max);
    });
}

void Widget::on_pushButton_clicked()
{
    // 设置 slider 新的取值范围
    horizontalSlider->setRange(20, 30);
}

点击按钮时,设置 slider 新的取值范围,触发 rangeChanged 信号,打印如下内容:

3、void sliderMoved(int value):当 slider 移动时触发的信号。

1
2
3
4
    // 当 slider 移动时触发的信号:参数表示 slider 当前的值
    connect(horizontalSlider, &QSlider::sliderMoved, [=](int value){
        qDebug() << "slider 当前的值:" << QString::number(value);
    });

4、void valueChanged(int value):当 slider 的值发生改变时触发的信号。

注意:当设置 slider 禁用追踪的时候,slider 在拖拽过程中不触发 valueChanged 信号,只有当用户释放 slider 的时候,才会触发 valueChanged 信号。

当 slider 启用追踪的时候,valueChanged 信号 和 sliderMoved 信号效果一样。

5、void sliderPressed() 和 void sliderReleased() 表示用户按下 slider 和释放 slider 触发的信号。