QSlider是滑动条控件
它允许用户通过拖动滑块来选择一个范围内的值。通常用于调整音量、亮度、进度等需要连续数值输入的场景
1. 效果演示
三个滑动条,分别用来调节RGB三个颜色的值,并显示到左侧各自的文本框中
并且将RGB这三个颜色的组合,来设置上面的文本框的背景颜色
2. 属性和方法
QSlider继承自QAbstractSlider,它的绝大多数属性都是从QAbstractSlider继承而来的。QSlider有很多属性,完整的可查看帮助文档。这里仅列出常用的属性和方法
2.1 值
滑动条和值相关的属性包括:当前值、最大值、最小值
// 获取和设置当前值
int value() const;
void setValue(int);
// 获取和设置最大值
int maximum() const;
void setMaximum(int);
// 获取和设置最小值
int minimum() const;
void setMinimum(int);
// 一次设置最大值和最小值
void setRange(int min, int max)
2.2 方向
Qt中滑动条有水平滑动条和垂直滑动条之分,通过修改orientation属性来设置
// 获取和设置滑动条的方向
Qt::Orientation orientation() const;
void setOrientation(Qt::Orientation);
2.3 步长
步长是指滑动条一次增加或减少的值。这里又包括两个步长:
- singleStep:是指按键盘的左右箭头(←/→)时的步长
- pageStep:是指点击滑块两侧时的步长
// 获取和设置singleStep
int singleStep() const;
void setSingleStep(int);
// 获取和设置pageStep
int pageStep() const;
void setPageStep(int);
2.4 刻度线
// 获取和设置刻度线间隔
int tickInterval() const
void setTickInterval(int ti)
// 获取和设置刻度线的位置
QSlider::TickPosition tickPosition() const
void setTickPosition(QSlider::TickPosition position)
2.5 信号槽
QSlider 常用的信号,如下:
// 当滑块被按下、移动、释放时发射的信号
void sliderPressed();
void sliderMoved(int value);
void sliderReleased();
// 当滑动条的值改变时,发射该信号
void valueChanged(int value);
3. 从零实现
从零写代码实现整体效果,以演示滑动条的属性以及信号槽的用法
3.1 布局
在UI设计师界面,拖拽对应的控件,修改显示的文字、控件的名称,然后完成布局
在右侧的属性窗口中,将MyWidget窗口的Point Size属性修改为14
布局完成效果如下:
3.2 代码实现
首先,来到mywidget.cpp中,对控件属性进行设置
为方便处理,将三个滑动条以及它们对应的属性放到列表中,如下:
MyWidget::MyWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MyWidget) {
ui->setupUi(this);
setWindowTitle("明王讲QT | 第二章 常用控件 | 2.9 滑动条QSlider");
// 1. 初始化滑动条属性
QList<QSlider*> sliders;
sliders << ui->sliderRed << ui->sliderGreen << ui->sliderBlue;
QList<QList<int>> props = {
// Minimum、Maximum、SingleStep、PageStep
{0, 255, 1, 10},
{0, 255, 5, 20},
{0, 255, 10, 50} //
};
for ( int i = 0; i < sliders.size(); i++ ) {
sliders[i]->setMinimum(props[i][0]);
sliders[i]->setMaximum(props[i][1]);
// sliders[i]->setRange(props[i][0], props[i][1]);
sliders[i]->setSingleStep(props[i][2]);
sliders[i]->setPageStep(props[i][3]);
// sliders[i]->setTickPosition(QSlider::TicksAbove);
// sliders[i]->setTickInterval(50);
sliders[i]->setOrientation(Qt::Horizontal);
}
// 2. 回显
int red = ui->sliderRed->value();
int green = ui->sliderGreen->value();
int blue = ui->sliderBlue->value();
ui->lineEditRed->setText(QString::number(red));
ui->lineEditGreen->setText(QString::number(green));
ui->lineEditBlue->setText(QString::number(blue));
QString style = QString("background-color: rgb(%1, %2, %3);").arg(red).arg(green).arg(blue);
ui->textEdit->setStyleSheet(style);
}
此时,运行效果:
然后,在mywidget.h中声明槽函数,并在mywidget.cpp中实现,如下:
// mywidget.h
class MyWidget : public QWidget {
private slots:
void onValueChanged(int value);
};
// mywidget.cpp
void MyWidget::onValueChanged(int value) {
// 1、获取rgb的颜色值
int red = ui->sliderRed->value();
int green = ui->sliderGreen->value();
int blue = ui->sliderBlue->value();
#if 0
// 判断是哪个滑动条触发的槽函数
QObject *obj = sender();
if (obj) {
QSlider *slider = qobject_cast<QSlider *>(obj);
if (slider == ui->sliderRed) {
}
}
#endif
// 2. 将颜色值显示到文本框
ui->lineEditRed->setText(QString::number(red));
ui->lineEditGreen->setText(QString::number(green));
ui->lineEditBlue->setText(QString::number(blue));
// 3、拼接样式字符串,设置textEdit背景色
QString style = QString("background-color: rgb(%1, %2, %3);").arg(red).arg(green).arg(blue);
// qDebug() << style;
ui->textEdit->setStyleSheet(style);
}
最后,别忘了在mywidget.cpp的构造函数中,关联信号和槽,如下:
MyWidget::MyWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MyWidget) {
// 3. 关联信号槽
connect(ui->sliderRed, &QSlider::valueChanged, this, &MyWidget::onValueChanged);
connect(ui->sliderGreen, &QSlider::valueChanged, this, &MyWidget::onValueChanged);
connect(ui->sliderBlue, &QSlider::valueChanged, this, &MyWidget::onValueChanged);
}
4. 点赞、获取源码
看到这里的小伙伴,去B站给明王一个【免费的点赞】吧,你的支持,是我持续更新优质内容的动力,感谢~
源码下载地址
链接: https://pan.baidu.com/s/1r9nk9Zp4i2jgQzcazWXGEw
提取码: ming







