一、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); }); |