Qt QSlider滑动条控件

12 篇文章 0 订阅

QSlider是滑动条控件,滑动条可以在一个范围内拖动,并将其位置转换为整数

最常见的应用就是视频播放器中的进度条

1 属性和方法

QSlider继承自QAbstractSlider,它的绝大多数属性都是从QAbstractSlider继承而来的。

QSlider有很多属性,完整的可查看帮助文档。这里仅列出常用的属性和方法

1.1 值

滑动条和值相关的属性包括:当前值、最大值、最小值

// 获取和设置当前值
int value() const;
void serValue(int);

// 获取和设置最大值
int maximum() const;
void setMaximum(int);

// 获取和设置最小值
int minimum() const;
void setMinimum(int);

// 一次设置最大值和最小值
void serRange(int min, int max);

1.2 方向

Qt中滑动条有水平滑动条和垂直滑动条之分

只需修改QSliderorientation属性,就可以滑动条的外观即可变为水平或者垂直的

// 获取和设置滑动条
Qt::Orientation orientation() const;
void setOrientation(Qt::Orientation);

1.3 步长

步长是指滑动条一次增加或减少的值

这里又包括两个步长:

  • SingleStep:是指接键盘的左右箭头(←/→)时的步长
  • pageStep:是指点击滑块两侧时的步长
// 获取和设置singleStep
int singleStep() const;
void setSingleStep(int);

// 获取和设置pageStep
int pageStep() const;
void serPageStep(int);

1.4 信号和槽

QSlider常用的信号,如下

// 当滑动被按下时发射该信号
void slidePressed();

// 当滑块移动时发射该信号
void sliderMoved(int value);

// 当滑块释放时发射该信号
void sliderReleased();

// 当滑动条的值改变时,发射该信号
void valueChanged(int value);

2 实例

三个滑动条,分别用来调节RGB三个颜色的值,并显示到左侧各自的文本框中

并且将RGB这三个颜色的组合,设置为上面的文本框的背景颜色

在这里插入图片描述

2.1 布局

在Ul设计师界面,拖拽对应的控件,修改显示的文字、控件的name,然后完成布局

在这里插入图片描述

2.2 代码实现

// 在Widget.cpp中

#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
    ui->setupUi(this);

    // 初始化红色滑动条
    ui->hsRed->setMaximum(255);
    ui->hsRed->setMinimum(0);
    // ui->hsRed->setRange(0, 255);
    ui->hsRed->setSingleStep(1);
    ui->hsRed->setPageStep(10);
    ui->hsRed->setOrientation(Qt::Horizontal);

    // 初始化绿色滑动条
    ui->hsGreen->setMaximum(255);
    ui->hsGreen->setMinimum(0);
    ui->hsGreen->setSingleStep(5);
    ui->hsGreen->setPageStep(20);

    // 初始化蓝色滑动条
    ui->hsBlue->setMaximum(255);
    ui->hsBlue->setMinimum(0);
    ui->hsBlue->setSingleStep(10);
    ui->hsBlue->setPageStep(50);

    // 初始化 设置文本框的背景色
    // background-color: rgb(255, 0, 0);
    QString style = "background-color: rgb(0, 0, 0);";
    ui->lineEdit->setStyleSheet(style);

    // 初始化LineEdit
    ui->leRed->setText(QString::number(ui->hsRed->value()));
    ui->leGreen->setText(QString::number(ui->hsGreen->value()));
    ui->leBlue->setText(QString::number(ui->hsBlue->value()));
}

Widget::~Widget() {
    delete ui;
}

void Widget::on_hsRed_valueChanged(int value) {
    QString red = QString::number(value);
    // QString red = QString::number(ui->hsRed->value());
    QString green = QString::number(ui->hsGreen->value());
    QString blue = QString::number(ui->hsBlue->value());
    ui->leRed->setText(red);

    // 设置文本框的背景色
    // background-color: rgb(255, 0, 0);
    QString style =
        "background-color: rgb(" + red + "," + green + "," + blue + ");";
    ui->lineEdit->setStyleSheet(style);
}

void Widget::on_hsGreen_valueChanged(int value) {
    QString green = QString::number(value);
    QString red = QString::number(ui->hsRed->value());
    QString blue = QString::number(ui->hsBlue->value());
    ui->leGreen->setText(green);
    // 设置文本框的背景色
    // background-color: rgb(255, 0, 0);
    QString style =
        "background-color: rgb(" + red + "," + green + "," + blue + ");";
    ui->lineEdit->setStyleSheet(style);
}

void Widget::on_hsBlue_valueChanged(int value) {
    QString blue = QString::number(value);
    QString red = QString::number(ui->hsRed->value());
    QString green = QString::number(ui->hsGreen->value());
    ui->leBlue->setText(blue);
    // 设置文本框的背景色
    // background-color: rgb(255, 0, 0);
    QString style =
        "background-color: rgb(" + red + "," + green + "," + blue + ");";
    ui->lineEdit->setStyleSheet(style);
}

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过继承QSlider类并重写paintEvent()函数来自定义QSlider滑动条,同时可以通过设置QStyleOptionSlider中的subControls属性来设置滑块的形状为圆形。具体实现可以参考以下代码: ``` class CustomSlider : public QSlider { public: CustomSlider(QWidget *parent = nullptr) : QSlider(parent) { setStyleSheet("QSlider::groove:horizontal { height: 10px; background: #ddd; }" "QSlider::handle:horizontal { width: 20px; border-radius: 10px; background: #333; }"); } protected: void paintEvent(QPaintEvent *event) override { QSlider::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QStyleOptionSlider opt; initStyleOption(&opt); QRect grooveRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, this); QRect handleRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); QPoint center = handleRect.center(); painter.setPen(Qt::NoPen); painter.setBrush(QColor("#333")); painter.drawEllipse(center, handleRect.width() / 2, handleRect.height() / 2); } }; ``` 在上述代码中,我们通过设置QSlider的样式表来设置滑动条的样式,其中groove表示滑动条的轨道,handle表示滑块。在paintEvent()函数中,我们首先调用QSlider的paintEvent()函数来绘制默认的滑动条,然后获取滑动条的轨道和滑块的矩形区域,并计算出滑块的中心点。最后,我们使用QPainter绘制一个圆形,将其填充为黑色,并以滑块的中心点为圆心,滑块宽度的一半为半径进行绘制,从而实现了圆形滑块的效果。 ### 回答2: QT是一款跨平台的C++图形用户界面应用程序开发框架。在QT中,我们可以自定义QSlider滑动条以及滑块的形状。 要自定义QSlider滑动条,首先我们需要创建一个自定义的滑动条类,继承QSlider。在该类中,我们可以重写一些QSlider的虚函数,如paintEvent()、sliderChange()等,以实现自定义的滑动条样式和功能。 要实现圆形的滑块,我们可以通过设置滑块样式表来实现。在QSlider的子类中,通过重写paintEvent()函数,我们可以在滑动条上绘制自定义的滑块。 以下是一个自定义的QSlider滑动条,滑块为圆形的示例代码: ```cpp class CustomSlider : public QSlider { Q_OBJECT public: CustomSlider(QWidget *parent = nullptr) : QSlider(parent) { setStyleSheet("QSlider::handle {" " background: green;" " border-radius: 8px;" " width: 16px;" " height: 16px;" "}"); } protected: void paintEvent(QPaintEvent *event) override { QSlider::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); QRect grooveRect = style()->subControlRect(QStyle::CC_Slider, this, QStyle::SC_SliderGroove, this); int x = grooveRect.x() + grooveRect.height() / 2 - 8; int y = grooveRect.y() + grooveRect.height() / 2 - 8; painter.setBrush(QColor(51, 153, 255)); painter.setPen(Qt::NoPen); painter.drawEllipse(QRect(x, y, 16, 16)); } }; ``` 在上述代码中,我们重写了CustomSlider的构造函数和paintEvent()函数。构造函数中通过设置样式表,将滑块的背景设为绿色,圆角半径设为8px,并设置滑块的大小为16x16px。paintEvent()函数中,我们通过获取滑动条的轨道区域,计算滑块的位置,然后绘制一个蓝色圆形作为滑块。 我们可以在应用程序中使用CustomSlider类来替代QSlider类,从而实现自定义的滑动条和圆形滑块。 ### 回答3: 要自定义QSlider滑动条,使滑块圆形,可以通过重写QStyle类的drawComplexControl方法来实现。具体步骤如下: 1. 创建一个继承自QStyle的自定义样式类,并重写drawComplexControl方法。 2. 在drawComplexControl方法中,首先调用父类的drawComplexControl方法,这样可以绘制默认样式的滑块。 3. 获取滑块的矩形区域,并将其设置为圆形。 4. 根据滑块的圆形矩形区域,绘制一个圆形。 5. 最后,将自定义样式类应用到QSlider件上。 下面是实现上述步骤的示例代码: ```C++ #include <QtWidgets> class CustomSliderStyle : public QStyle { public: using QStyle::QStyle; void drawComplexControl(ComplexControl control, const QStyleOptionComplex* option, QPainter* painter, const QWidget* widget = nullptr) const override { if (control == CC_Slider && option->subControls == SC_SliderHandle) { QStyleOptionSlider opt = *qstyleoption_cast<const QStyleOptionSlider*>(option); // 绘制默认样式的滑块 QStyle::drawComplexControl(control, option, painter, widget); // 获取滑块的矩形区域 QRect grooveRect = subControlRect(CC_Slider, option, SC_SliderHandle, widget); QRect handleRect = opt.rect; // 将滑块的矩形区域设置为圆形 handleRect.setSize(QSize(handleRect.width(), handleRect.width())); handleRect.moveCenter(grooveRect.center()); // 绘制圆形滑块 painter->save(); painter->setRenderHint(QPainter::Antialiasing, true); painter->setPen(Qt::NoPen); painter->setBrush(opt.palette.buttonText()); painter->drawEllipse(handleRect); painter->restore(); } else { QStyle::drawComplexControl(control, option, painter, widget); } } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); QSlider slider; CustomSliderStyle customStyle; slider.setStyle(&customStyle); slider.show(); return app.exec(); } ``` 通过以上代码,可以自定义QSlider滑动条,使滑块变为圆形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值