隐藏QScrollBar箭头

13

如何隐藏 QScrollBar 箭头?

我需要在水平滚动条中隐藏箭头。 我尝试使用 setStyleSheet 隐藏:

setStyleSheet(" QScrollBar:left-arrow:horizontal, QScrollBar::right-arrow:horizontal { height:0px; }" )

但它无法正常工作。


你是指箭头本身还是包含箭头的按钮? - thuga
我在QtDesigner中尝试自定义滚动条,似乎Qt中的滚动条样式表历史比较复杂。你不能仅更改箭头样式。你需要重新实现QScrollBar中的所有内容的样式,然后才能更改样式。在这里可以看到示例:http://qt-project.org/doc/qt-5/stylesheet-examples.html#customizing-qscrollbar 。复制整个示例是有效的,但仅箭头部分无效。我认为这很奇怪。 - Pie_Jesu
4个回答

14

如果您只需要隐藏按钮内部的箭头,则可以尝试以这种方式设置背景和边框:

QScrollBar::right-arrow:horizontal, QScrollBar::left-arrow:horizontal
{
      border: none;
      background: none;
      color: none;
}
如果您想隐藏整个按钮,则可以使用以下代码。
QScrollBar::add-line:horizontal {
      border: none;
      background: none;
}

QScrollBar::sub-line:horizontal {
      border: none;
      background: none;
}

9
我知道这是一个老问题,但我遇到了这个问题的批准答案,并且我找到了解决方法,所以我将在此留下这个答案,以防有人遇到与我同样的问题。
虽然接受的答案建议将borderbackgroundcolor设置为none,但这只是视觉上隐藏了滚动条箭头。我的意思是,您仍然可以点击它们,而滚动条的处理程序,尽管它可以移动到它们占用的地方,但如果您的光标在箭头按钮的区域内,则无法单击它们。
为了使其在功能上也被隐藏,您应该将它们的widthheight样式设置为0px。这将使您在滚动条的处理程序位于箭头按钮所占据的区域时能够单击处理程序。

1
创建一个QScrollBar并将其分配给此样式表,这应该可以解决问题。请参见下面的示例。
QScrollBar:vertical {
  width: 15px;
  background: #f1f1f1;
}

QScrollBar::handle:vertical {
  background: #888;
}

QScrollBar::add-line:vertical {
  border: 2px solid gray;
  background: #f1f1f1;
}

QScrollBar::sub-line:horizontal {
  border: 2px solid gray;
  background: #f1f1f1;
}

QScrollBar::handle:hover:vertical {
  background: #555;
}

创建一个QScrollBar并将其分配给这个样式表,这应该就可以解决问题了。哦,你可以自由地更改设置。 - user11738998
1
欢迎来到SO,请编辑您的答案并解释如何以及为什么解决了问题,这将有助于提高您的帖子质量,并可能获得更多的赞。 - Android

0

为了隐藏滚动条,您可以设置该特定滚动条(在您的情况下为水平滚动条)的滚动条策略。例如:

QScrollBar scrollBar;
scrollBar.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

2
我需要隐藏滚动条的箭头而不是整个滚动条。 - programtg

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