0

如何在 QScrollbar 旁边放置一个小部件,如下所示: 在此处输入图像描述

我使用 QScrollArea 并覆盖 Horizo​​ntal-QScrollBar。首先我想,我可以使用paintEvent在栏旁边画一个像“100%”这样的文本。但我只能覆盖现有的画。

现在我认为,唯一的机会是从源代码中实现 QScorllBarPrivate 漏洞......有人知道吗?

4

1 回答 1

1

主要思想是创建一个覆盖隐藏默认水平滚动条并代替您自己的底线。

  1. 创建一个代表底线的小部件,即带有显示一些信息的标签和一个水平 QScrollBar 的小部件,所有这些都放在一个 hbox 布局中。
  2. 通过使 QScrollArea 成为此小部件的直接父小部件,将此小部件放入滚动区域而不将其添加到布局中。
  3. 在底线小部件上使用move()和在初始化时正确定位它。resize()还可以在滚动区域调整大小时调整大小并重新定位(您可以使用事件过滤器或继承来调整事件大小)。
  4. 确保滚动区域的horizontalScrollBarPolicy滚动Qt::ScrollBarAlwaysOn区域的内部布局始终保持足够的空间以容纳底线小部件。
  5. 还要确保底线小部件与默认滚动条具有相同的高度。只要您删除 hbox 布局中的间距和边距,并且标签(或其他小部件)不需要比滚动条更多的垂直空间,这应该很容易。
  6. 用于horizontalScrollBar()获取滚动区域的内部QScrollBar并将其与您自己的栏同步。QScrollBarhasrangeChanged()valueChanged()信号,以便您可以连接到它们并正确更新您的栏。当用户更改滚动条的值并触发其valueChanged()信号时,您应该为内部滚动条设置相同的值。您可以通过使用指示这是您自己的更改的标志来防止其中的无限递归。
于 2015-02-05T00:53:33.120 回答