QScrollBar Class

详细说明 滚动条是一种控件,可让用户访问比用于显示的 widget 更大的文档部分。它可以直观地显示用户在文档中的当前位置以及文档的可视面...

详细说明

滚动条是一种控件,可让用户访问比用于显示的 widget 更大的文档部分。它可以直观地显示用户在文档中的当前位置以及文档的可视面积。滚动条通常还配有其他控件,以实现更精确的导航。Qt 以适合每个平台的方式显示滚动条。

如果您需要在其他部件上提供滚动视图,使用QScrollArea 类可能更方便,因为该类提供了视口部件和滚动条。如果您需要使用QAbstractScrollArea 为专门的 widget 实现类似功能,例如,如果您决定子类化QAbstractItemView ,那么 QScrollBar 将非常有用。对于使用滑块控件获取给定范围内数值的大多数其他情况,QSlider 类可能更适合您的需要。

滚动条通常包括四个独立的控件:滑块、滚动箭头和页面控件。

a.滑块提供了一种快速转到文档任何部分的方法,但不支持在大型文档中进行精确导航。

b.滚动箭头是按钮,可用于准确导航到文档中的特定位置。对于连接到文本编辑器的垂直滚动条,这些箭头通常会将当前位置向上或向下移动一 "行",并以小幅度调整滑块的位置。在编辑器和列表框中,一个 "行 "可能指一行文本;在图像查看器中,可能指 20 个像素。

c.页面控件是拖动滑块的区域(滚动条的背景)。单击此处可将滚动条向单击处移动一 "页"。该值通常与滑块的长度相同。

每个滚动条都有一个值,表示滑块距离滚动条起点的距离;该值通过value() 获得,并通过setValue() 进行设置。该值始终位于为滚动条定义的值范围内,即从minimum() 到maximum() (包括 () 和 () )。可接受的数值范围可通过setMinimum() 和setMaximum() 设置。在最小值时,滑块的顶部边缘(垂直滚动条)或左侧边缘(水平滚动条)将位于滚动条的顶部(或左侧)。在最大值时,滑块的底部(或右侧)边缘将位于滚动条的底部(或右侧)。

滑块的长度通常与页面步长的值有关,通常代表滚动视图中显示的文档区域的比例。页面步长是用户按Page Up 和Page Down 键时数值变化的量,用setPageStep() 设置。使用光标键可以对行步长定义的值进行较小的更改,这个量通过setSingleStep() 进行设置。

请注意,使用的数值范围与滚动条 widget 的实际大小无关。在选择范围和页面步长值时,无需考虑这一点。

为滚动条指定的数值范围通常与QSlider 的数值范围不同,因为需要考虑滑块的长度。如果文档有 100 行,而我们只能在 widget 中显示 20 行,那么我们可能希望构建一个页面步长为 20、最小值为 0、最大值为 80 的滚动条。这样,我们就可以得到一个有五个 "页面 "的滚动条。

在许多常见情况下,文档长度、滚动条的取值范围和页面步长之间的关系都很简单。从某个代表文档长度的值中减去选定的页面步长,就可以确定滚动条的取值范围。在这种情况下,以下等式非常有用:文档长度=maximum() -minimum() +pageStep() 。

QScrollBar 只提供整数范围。请注意,虽然 QScrollBar 可以处理非常大的数字,但在当前屏幕上,滚动条无法有效表示超过约 100,000 像素的范围。超过这个范围后,用户就很难使用键盘或鼠标控制滑块,滚动箭头的作用也很有限。

ScrollBar 从QAbstractSlider 继承了一整套信号:

valueChanged() 在滚动条的值发生变化时发出。tracking 属性决定该信号是否在用户交互时发出。

rangeChanged() 在滚动条的值范围发生变化时发出。

sliderPressed() 在用户开始拖动滑块时发出。

sliderMoved() 在用户拖动滑块时发出。

sliderReleased(当用户释放滑块时,将发出()。

actionTriggered(当用户交互或通过triggerAction() 函数改变滚动条时,会发出()。

滚动条可由键盘控制,但其默认focusPolicy() 为Qt::NoFocus 。使用setFocusPolicy() 可启用键盘与滚动条的交互:

向左/向右移动水平滚动条一步。

上/下移动垂直滚动条一步。

PageUp 上移一页。

下一页向下移动一页。

首页移动到起点(最小值)。

终点移动到终点(最大值)。

滑块本身可以通过triggerAction() 函数来控制,以模拟用户与滚动条控件的交互。如果您有许多不同的窗口小部件,而这些小部件使用的数值范围相同,那么这种方法就非常有用。

大多数 GUI 样式都使用pageStep() 值来计算滑块的大小。