在 qscrollbar 旁边添加小部件

Add widget next to qscrollbar

如何将小部件放置在 QScrollbar 旁边,如下所示:

我使用 QScrollArea 并覆盖 Horizo​​ntal-QScrollBar。首先我想,我可以使用 paintEvent 在栏旁边绘制文本,如“100 %”。但是我只能覆盖已有的画

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

主要想法是创建一个覆盖层来遮盖默认的水平滚动条并显示您自己的底线。

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