如何在QScrollArea中隐藏滚动条?

11
如何在 QScrollArea 中隐藏滚动条?目前我使用QScrollArea::horizontalScrollBar()QScrollArea::verticalScrollBar()返回的滚动条的hide()方法,但是仍然保留了为滚动条预留的空间。显然这看起来很丑,并且不够高效。如果完全删除滚动条,我将无法使用QScrollBar::setValue()轻松滚动到特定位置。
4个回答

22

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

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

完成!现在没有滚动条,您仍然可以使用 setValue()来操作它们。


唯一有效的选项。 - Name

19

使用这段代码:

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

2
如果我这样做,就不能再使用QScrollBar :: setValue()滚动到特定点(因为滚动条不存在)。 - pafcu
3
如果需要滚动条时,请使用策略:Qt::ScrollBarAsNeeded。 如果想要通过编程方式滚动内容,请使用QAbstractScrollArea::scrollContentsBy(int dx, int dy)。 - Mason Zhang
1
显然,你应该调用滚动条的 setValue() 而不是 scrollContentsBy() - Oliver

3
这段代码可以完成任务:
 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 verticalScrollBar()->hide();
 verticalScrollBar()->resize(0, 0);

1

Qt文档中了解scrollContentsBy()函数:

为了程序控制滚动,请勿调用此函数,而应使用滚动条(例如通过直接调用QScrollBar::setValue())。


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