【问题标题】:How to hide scrollbar in QScrollArea?如何在 QScrollArea 中隐藏滚动条?
【发布时间】:2010-08-01 18:44:11
【问题描述】:

如何隐藏QScrollArea 中的滚动条?目前我在QScrollArea::horizontalScrollBar()QScrollArea::verticalScrollBar() 返回的滚动条上使用hide() 方法,但为滚动条保留的空间仍然存在。显然,这看起来很丑陋,而且不节省空间。如果我完全移除滚动条,我将无法再使用 QScrollBar::setValue() 轻松滚动到特定点。

【问题讨论】:

    标签: qt qscrollarea


    【解决方案1】:

    您可以使用样式表将其隐藏。 使用height:0px; 隐藏水平滚动条,使用width=0px; 隐藏垂直滚动条。 像这样:

    horizontalScrollBar()->setStyleSheet("QScrollBar {height:0px;}");
    verticalScrollBar()->setStyleSheet("QScrollBar {width:0px;}");
    

    瞧!没有滚动条,您仍然可以使用setValue() 操作它们。

    【讨论】:

    • 唯一可行的选择。
    【解决方案2】:

    使用此代码:

    QAbstractScrollArea::setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff )
    QAbstractScrollArea::setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ) 
    

    【讨论】:

    • 如果我这样做,我不能再使用 QScrollBar::setValue() 滚动到特定点(因为滚动条不存在)
    • 如果需要时需要滚动条,请使用策略:Qt::ScrollBarAsNeeded。如果您想以编程方式滚动内容,请使用 QAbstractScrollArea::scrollContentsBy (int dx, int dy)
    • Apparenly 你应该调用滚动条的setValue() 而不是scrollContentsBy()
    【解决方案3】:

    这段代码可以完成这项工作:

     setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     verticalScrollBar()->hide();
     verticalScrollBar()->resize(0, 0);
    

    【讨论】:

      【解决方案4】:

      来自Qt documentsscrollContentsBy()

      调用此函数以编程方式滚动是错误的,请改用滚动条(例如,通过直接调用 QScrollBar::setValue())。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        • 2022-07-22
        • 2012-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多