在qscrollbar旁边添加小部件

时间:2015-02-04 22:30:57

标签: c++ qt styles qscrollarea

如何将小部件放在QScrollbar旁边,如下所示: enter image description here

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

现在我想,唯一的机会就是从源代码中实现漏洞QScorllBarPrivate ......任何人都有任何想法?

1 个答案:

答案 0 :(得分:1)

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

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