- class QAbstractScrollArea#
提供带有即时滚动条的滚动区域的
QAbstractScrollArea
小部件。更多…继承自:
QTextEdit
,QTextBrowser
,QScrollArea
,QPlainTextEdit
,QMdiArea
,QGraphicsView
,QAbstractItemView
,QTreeView
,QTreeWidget
,QHelpContentWidget
,QTableView
,QTableWidget
,QListView
,QUndoView
,QListWidget
,QHelpIndexWidget
,QHeaderView
,QColumnView
,QPdfView
,QChartView
概述#
属性#
horizontalScrollBarPolicy属性
- 水平滚动条的策略sizeAdjustPolicy属性
- 描述滚动区域大小在视口大小改变时如何变化的策略verticalScrollBarPolicy属性
- 垂直滚动条的策略
方法#
定义
__init__()
定义
viewport()
虚方法#
注意
此文档可能包含自动从C++翻译到Python的片段。我们始终欢迎对片段翻译的贡献。如果发现翻译问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细说明#
警告
本节包含自动从C++翻译到Python的片段,可能存在错误。
QAbstractScrollArea
是滚动区域的底层抽象。该区域提供了一个称为视口的中央小部件,其中包含要滚动的内容(即,内容中可见的部分将渲染在视口中)。在视口旁边是一个垂直滚动条,下面是一个水平滚动条。当所有区域内容都适合视口时,每个滚动条可以根据其Qt::ScrollBarPolicy是可见还是隐藏。当滚动条隐藏时,视口会扩展以覆盖所有可用空间。当滚动条又变得可见时,视口会缩小以腾出空间。
可以在视口周围保留一个边距区域,请参阅
setViewportMargins()
。该功能主要用于放置QHeaderView
小部件在滚动区域上方或旁边。QAbstractScrollArea
的子类应实现边距。继承
QAbstractScrollArea
时,需要做以下操作通过设置范围、值、页面步进和跟踪其移动来控制滚动条。
根据滚动条的值在视口中绘制区域的内容。
在
viewportEvent()
中处理接收到的视口事件 - 尤其是调整大小事件。使用
viewport->update()
来更新视口的内容而不是update()
,因为所有绘图操作都在视口上进行。
在Qt::ScrollBarAsNeeded(默认)的滚动条策略下,
QAbstractScrollArea
在滚动条提供非零滚动范围时显示它们,否则隐藏它们。当视口接收到调整大小事件或内容大小发生变化时,应更新滚动条和视口。当滚动条的值发生变化时,也需要更新视口。滚动条的初始值通常在接收到新内容时设置。
我们给出一个简单的例子,在这个例子中,我们实现了一个可以滚动任何
QWidget
的滚动区域。我们将小部件设置为视口的子部件;这样,我们不需要计算绘制小部件的哪个部分,而可以简单地将小部件通过move()
移动。当区域内容或视口大小发生变化时,我们执行以下操作:areaSize = viewport().size() QSize widgetSize = widget.size() verticalScrollBar().setPageStep(areaSize.height()) horizontalScrollBar().setPageStep(areaSize.width()) verticalScrollBar().setRange(0, widgetSize.height() - areaSize.height()) horizontalScrollBar().setRange(0, widgetSize.width() - areaSize.width()) updateWidgetPosition()
当滚动条值发生变化时,我们需要更新小部件位置,即找到要绘制在视口中的小部件部分。
hvalue = horizontalScrollBar().value() vvalue = verticalScrollBar().value() topLeft = viewport().rect().topLeft() widget.move(topLeft.x() - hvalue, topLeft.y() - vvalue)
为了跟踪滚动条的移动,重新实现虚拟函数
scrollContentsBy()
。为了微调滚动行为,连接到一个滚动条的actionTriggered()
信号,并调整sliderPosition
以达到您想要的效果。为了方便起见,
QAbstractScrollArea
将视口的所有事件都放在虚拟的viewportEvent()
处理程序中。在合理的情况下,将QWidget
的专用处理程序重新映射到视口事件。重映射的专业处理程序包括:paintEvent()
、mousePressEvent()
、mouseReleaseEvent()
、mouseDoubleClickEvent()
、mouseMoveEvent()
、wheelEvent()
、dragEnterEvent()
、dragMoveEvent()
、dragLeaveEvent()
、dropEvent()
、contextMenuEvent()
和resizeEvent()
。QScrollArea
类继承自QAbstractScrollArea
,它为任意QWidget
提供平滑滚动(即,窗口以像素为单位进行滚动)。只有在你需要更专业的行为时,才需要继承QAbstractScrollArea
。例如,如果整个区域的内容不适合在QWidget
中绘制,或者你不需要平滑滚动。另请参阅
- class SizeAdjustPolicy#
此枚举指定当视口大小变化时,应如何调整
QAbstractScrollArea
的大小提示。常数
描述
QAbstractScrollArea.AdjustIgnored
滚动区域将按以前的样式表现 - 不进行任何调整。
QAbstractScrollArea.AdjustToContents
滚动区域将始终调整到视口大小。
QAbstractScrollArea.AdjustToContentsOnFirstShow
滚动区域首次显示时将调整到其视口大小。
注意
可以在使用
from __feature__ import true_property
时直接使用属性,否则通过访问函数使用。- property horizontalScrollBarPolicyᅟ: Qt.ScrollBarPolicy#
此属性持有水平滚动条的策略。
默认策略是 Qt::ScrollBarAsNeeded。
- property sizeAdjustPolicyᅟ: QAbstractScrollArea.SizeAdjustPolicy#
此属性持有描述当视口大小变化时,滚动区域大小如何变化的策略。
默认策略是
AdjustIgnored
。修改此属性实际上可能会调整滚动区域的大小。- 属性 verticalScrollBarPolicyᅟ: Qt.ScrollBarPolicy#
此属性保存了垂直滚动条的政策。
默认策略是 Qt::ScrollBarAsNeeded。
构建一个视口。
parent
参数传递给QWidget
构造函数。将
widget
作为滚动条部件添加到由alignment
指定的位置。滚动条部件显示在水平或垂直滚动条旁边,可以放置在它的任何一边。如果您想使滚动条部件始终可见,则将相应滚动条的 scrollBarPolicy 设置为
AlwaysOn
。alignment
必须是 Qt::AlignLeft 和 Qt::AlignRight 的组合,映射到水平滚动条,或 Qt::AlignTop 和 Qt::AlignBottom 的组合,映射到垂直滚动条。可以通过重新父化部件或删除它来移除滚动条部件。还可以使用
hide()
隐藏部件。滚动条部件将调整大小以适应当前样式的滚动条几何形状。以下描述了水平滚动条上的滚动条部件的情况:
小部件的高度将设置为匹配滚动条的高度。要控制小部件的宽度,请使用:
setMinimumWidth
和setMaximumWidth
,或者实现sizeHint()
并设置水平尺寸策略。如果需要正方形小部件,请调用pixelMetric
(PM_ScrollBarExtent
)并将宽度设置为这个值。另请参阅
返回两个滚动条之间角落中的小部件。
默认情况下,不存在角落小部件。
另请参阅
- horizontalScrollBar()#
- 返回类型:
返回水平滚动条。
属性
horizontalScrollBarPolicyᅟ
的获取器。返回视口的大小,就像滚动条没有有效的滚动范围一样。
返回当前设置的所有滚动条小部件的列表。
alignment
可以是四个位置标志的组合。另请参阅
- scrollContentsBy(dx, dy)#
- 参数:
dx – int
dy – int
当滚动条通过
dx
、dy
移动时,调用此虚拟处理程序,并且相应地视图的内容应该滚动。默认实现简单地调用整个
viewport()
的update()
,子类可以重新实现此处理程序以进行优化,或者如QScrollArea
一样,移动内容部件。参数dx
和dy
方便地存在,这样类就可以知道应该滚动多少(例如,在进行像素位移时很有用)。您也可以忽略这些值,直接滚动到滚动条指示的位置。为程序性地滚动而调用此函数是错误的,请使用滚动条(例如,通过直接调用
setValue()
)。设置两个滚动条之间的角落部件为
widget
。您可能还会想要将至少一个滚动条模式设置为
AlwaysOn
。传递
None
不会在角落显示任何部件。任何以前的角落部件都将被隐藏。
您可以在不同时间以相同部件调用setCornerWidget()。
除非您在设置另一个角落部件(或
None
)后单独将部件重新父级化,否则在滚动区域销毁时,所有在此设置的部件都将被删除。任何新设置的部件都应该没有当前父级。
默认情况下,不存在角落小部件。
- setHorizontalScrollBar(scrollbar)#
- 参数:
scrollbar –
QScrollBar
用
scrollBar
替换现有的水平滚动条,并将以前滚动条的滑块属性设置在新滚动条上。然后删除以前的滚动条。QAbstractScrollArea
默认提供了水平和垂直滚动条。您可以通过调用此函数用您自己的自定义滚动条替换默认的水平滚动条。- setHorizontalScrollBarPolicy(arg__1)#
- 参数:
arg__1 –
ScrollBarPolicy
设置属性
horizontalScrollBarPolicyᅟ
的值。- setSizeAdjustPolicy(policy)#
- 参数:
policy –
SizeAdjustPolicy
另请参阅
设置属性
sizeAdjustPolicyᅟ
的值。- setVerticalScrollBar(scrollbar)#
- 参数:
scrollbar –
QScrollBar
用
scrollBar
替换现有的垂直滚动条,并将前一个滚动条的滑块属性设置到新滚动条上。然后删除前一个滚动条。QAbstractScrollArea
默认提供垂直和水平滚动条。您可以通过调用此函数用自定义滚动条替换默认的垂直滚动条。- setVerticalScrollBarPolicy(arg__1)#
- 参数:
arg__1 –
ScrollBarPolicy
设置属性
verticalScrollBarPolicyᅟ
的值。将视口设置为给定的
widget
。并发给定的widget
所有的QAbstractScrollArea
。如果
widget
是None
,QAbstractScrollArea
将为视图区域分配新的QWidget
实例。另请参阅
设置滚动区域的边缘
margins
。这对于像带有“锁定”行和列的电子表格这样的应用程序很有用。边缘空间留空;在该未使用的区域内放置小部件。默认情况下,所有边距都为零。
另请参阅
- setViewportMargins(left, top, right, bottom)
- 参数:
left – int
top – int
right – int
bottom – int
设置滚动区域的边缘为
left
、top
、right
和bottom
。这对于像带有“锁定”行和列的电子表格这样的应用程序很有用。边缘空间留空;在该未使用的区域内放置小部件。请注意,此函数通常由
QTreeView
和QTableView
调用,因此边缘由QAbstractScrollArea
子类实现。此外,如果子类要在项视图中使用,它们不应调用此函数。默认情况下,所有边距都为零。
另请参阅
当调用
setViewport
(viewport
)后,QAbstractScrollArea
将调用此槽。在QAbstractScrollArea
的子类中重写此函数,以便在它被使用之前初始化新的viewport
。另请参阅
属性 `
sizeAdjustPolicy
` 的获取器。- verticalScrollBar()#
- 返回类型:
返回垂直滚动条。
属性 `
verticalScrollBarPolicy
` 的获取器。返回视口小部件。
使用 `
widget()
` 函数检索视口小部件的内容。另请参阅
滚动区域(
viewport
小部件)的主事件处理器。它处理指定的 `event`,并且可以被子类调用以提供合理的默认行为。返回
true
以指示事件系统事件已被处理,不再需要进一步处理;否则返回false
以指示事件应该被进一步传递。你可以在子类中实现此函数,但我们建议使用其中一个专门的额外处理器。
处理视口事件的专用处理函数包括:
paintEvent()
,mousePressEvent()
,mouseReleaseEvent()
,mouseDoubleClickEvent()
,mouseMoveEvent()
,wheelEvent()
,dragEnterEvent()
,dragMoveEvent()
,dragLeaveEvent()
,dropEvent()
,contextMenuEvent()
和resizeEvent()
。返回滚动区域周围的边距。默认情况下,所有边距均为零。
另请参阅
返回视图的建议大小。默认实现返回视图大小,没有可见的滚动条。