滑动条显示最小值、最大值和当前值。

9

是否可以显示QSlider的最小值、最大值和当前选定值?当然,我可以使用标签来显示这些内容,但我认为QSlider必须有这样的可能性。


我认为你需要对其进行子类化。 - Nemanja Boric
3个回答

11

您有两个选项..

1) 如注释中所提到的 - 子类

2) 添加尽可能多的QLabel,将QSlider添加为 父元素,在QSlider上安装eventHandler()以捕获调整大小事件以适当地定位它们,并显然处理滚动事件,以便您可以更新它们... 因此标签将仅漂浮在QSlider之上。


10
这是一个高端滑块实现的快速示例,它继承了 qslider 类并将当前值显示在滑块手柄下方的提示框中。请见以下代码。

标题

#ifndef FANCYSLIDER_H
#define FANCYSLIDER_H

#include <QSlider>

class FancySlider : public QSlider
{
    Q_OBJECT
public:
    explicit FancySlider(QWidget *parent = 0);
    explicit FancySlider(Qt::Orientation orientation, QWidget *parent = 0);

protected:
    virtual void sliderChange(SliderChange change);
};

#endif // FANCYSLIDER_H

C++

#include "FancySlider.h"

#include <QStyleOptionSlider>
#include <QToolTip>

FancySlider::FancySlider(QWidget * parent)
    : QSlider(parent)
{
}

FancySlider::FancySlider(Qt::Orientation orientation, QWidget * parent)
    : QSlider(orientation, parent)
{
}

void FancySlider::sliderChange(QAbstractSlider::SliderChange change)
{
    QSlider::sliderChange(change);

    if (change == QAbstractSlider::SliderValueChange )
    {
        QStyleOptionSlider opt;
        initStyleOption(&opt);

        QRect sr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);
        QPoint bottomRightCorner = sr.bottomLeft();

        QToolTip::showText(mapToGlobal( QPoint( bottomRightCorner.x(), bottomRightCorner.y() ) ), QString::number(value()), this);
    }
}

3

这是我的实现方法,没有使用子类。通过实例化一个滑块,在右侧显示标签,展示滑块当前的值:

QWidget *tmpW1 = new QWidget(this);
QHBoxLayout *tmpH1 = new QHBoxLayout(this);
QLabel *tmpLabel = new QLabel("0");

QSlider *tmpSlider = new QSlider(Qt::Horizontal, this);
tmpSlider->setMinimum(0);
tmpSlider->setMaximum(10);
tmpSlider->setValue(5);

tmpH1->addWidget(tmpSlider);
tmpH1->addWidget(tmpLabel);
tmpW1->setLayout(tmpH1);

QObject::connect(tmpSlider, &QSlider::valueChanged, this, [=] () {
    tmpLabel->setText(QString::number(tmpSlider->value()));
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接