【发布时间】:2013-08-25 09:17:01
【问题描述】:
是否可以显示 QSlider 的最小值、最大值和当前选定值?当然我可以用标签来显示这个,但我认为QSlider中一定有这种可能性
【问题讨论】:
-
我认为你必须继承它。
是否可以显示 QSlider 的最小值、最大值和当前选定值?当然我可以用标签来显示这个,但我认为QSlider中一定有这种可能性
【问题讨论】:
你有两个选择..
1) 在 cmets - 子类中提到
2) 使用 QSlider 作为 parent 添加任意数量的 QLabel,在 QSlider 上安装 eventHandler() 以捕获调整大小事件以正确定位它们,并且显然可以处理滚动事件,因此您可以更新他们...所以标签只会漂浮在 QSlider 之上
【讨论】:
这是我快速实现的一个花哨的滑块,它是 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
Cpp
#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);
}
}
【讨论】:
这是我的实现,没有子类化。实例化一个右侧带有标签的滑块,显示滑块的当前值:
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()));
});
【讨论】: