【问题标题】:QSlider show min, max and current valueQSlider 显示最小值、最大值和当前值
【发布时间】:2013-08-25 09:17:01
【问题描述】:

是否可以显示 QSlider 的最小值、最大值和当前选定值?当然我可以用标签来显示这个,但我认为QSlider中一定有这种可能性

【问题讨论】:

  • 我认为你必须继承它。

标签: c++ qt qslider


【解决方案1】:

你有两个选择..

1) 在 cmets - 子类中提到

2) 使用 QSlider 作为 parent 添加任意数量的 QLabel,在 QSlider 上安装 eventHandler() 以捕获调整大小事件以正确定位它们,并且显然可以处理滚动事件,因此您可以更新他们...所以标签只会漂浮在 QSlider 之上

【讨论】:

    【解决方案2】:

    这是我快速实现的一个花哨的滑块,它是 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);
        }
    }
    

    【讨论】:

      【解决方案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()));
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 2012-01-19
        • 1970-01-01
        • 2015-11-25
        • 2015-05-04
        • 2022-08-05
        相关资源
        最近更新 更多