2015-02-04 44 views
0

如何放置一个小窗口旁边QScrollbar喜欢这里看到: enter image description here添加小部件旁边qscrollbar

我使用QScrollArea和覆盖水平,QScrollBar。首先,我想,我可以使用paintEvent在栏的旁边绘制文本,如“100%”。但我只能覆盖现有的绘画。

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

+1

QScrollBar只是滚动区域的一个小部件成员。当您在滚动区域中收到大小事件时,是否可以调整水平滚动条的大小?如果是这样,您可以向滚动区域绘制事件添加额外的渲染以绘制您的百分比和分辨率 – cppguy

+0

QScrollbar变小,但它与左边界对齐。我不知道如何在那里放置一个新的部件(也在他的右侧..) – Viatorus

回答

1

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

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