如何获得 QSlider-handle 的大小?

Posted

技术标签:

【中文标题】如何获得 QSlider-handle 的大小?【英文标题】:How to get size of QSlider-handle? 【发布时间】:2017-01-10 21:14:01 【问题描述】:

QSliders 在不同平台上的显示方式不同。如何获得QSliderhandlewidthheight,是否使用CSS 进行样式设置? 我只知道检索整个QWidget 的size 的方法,但不知道handle

【问题讨论】:

【参考方案1】:

有一种很糟糕的方法,它可能不必正常工作,但它仍然有效:

QSize sliderHandleSize( const QSlider& slider )

    const QSize _minSize = slider.minimumSizeHint();
    
    switch( slider.orientation() )
    
        case Qt::Orientation::Horizontal:
            return QSize( _minSize.width() - 1, _minSize.height() );
        case Qt::Orientation::Vertical:
            return QSize( _minSize.width(), _minSize.height() - 1 );
        default:
            Q_ASSERT_X( false, "sliderHandleSize", "Today is a bad day" );
    
    
    return _minSize;

【讨论】:

【参考方案2】:

查看QSlider Stylesheet example:

QSlider::groove:horizontal

    border: 1px solid #bbb;
    background: white;
    height: 10px;
    border-radius: 4px;


QSlider::sub-page:horizontal

    background: qlineargradient(x1: 0, y1: 0,    x2: 0, y2: 1,
        stop: 0 #66e, stop: 1 #bbf);
    background: qlineargradient(x1: 0, y1: 0.2, x2: 1, y2: 1,
        stop: 0 #bbf, stop: 1 #55f);
    border: 1px solid #777;
    height: 10px;
    border-radius: 4px;


QSlider::add-page:horizontal

    background: #fff;
    border: 1px solid #777;
    height: 10px;
    border-radius: 4px;


QSlider::handle:horizontal

    background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
        stop:0 #eee, stop:1 #ccc);
    border: 1px solid #777;
    width: 13px;
    margin-top: -2px;
    margin-bottom: -2px;
    border-radius: 4px;


QSlider::handle:horizontal:hover

    background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
        stop:0 #fff, stop:1 #ddd);
    border: 1px solid #444;
    border-radius: 4px;


QSlider::sub-page:horizontal:disabled

    background: #bbb;
    border-color: #999;


QSlider::add-page:horizontal:disabled

    background: #eee;
    border-color: #999;


QSlider::handle:horizontal:disabled

    background: #eee;
    border: 1px solid #aaa;
    border-radius: 4px;

【讨论】:

感谢您的回复 Edward,但是我不知道如何从样式示例中获得手柄的尺寸?我不是在寻找如何设置widthheigth,而是在寻找如何获取这些值?

以上是关于如何获得 QSlider-handle 的大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何按文件夹、名称、大小、日期对 GTLQueryDrive 项目进行排序

如何修复查询以获得错误的答案

如何获得QQ好友列表

如何获得当前位置?

Q-dir 如何默认使用大图标

如何快速获得缺口大小