class QAbstractScrollArea#

提供带有即时滚动条的滚动区域的 QAbstractScrollArea 小部件。更多…

Inheritance diagram of PySide6.QtWidgets.QAbstractScrollArea

继承自: QTextEditQTextBrowserQScrollAreaQPlainTextEditQMdiAreaQGraphicsViewQAbstractItemViewQTreeViewQTreeWidgetQHelpContentWidgetQTableViewQTableWidgetQListViewQUndoViewQListWidgetQHelpIndexWidgetQHeaderViewQColumnViewQPdfViewQChartView

概述#

属性#

方法#

虚方法#

注意

此文档可能包含自动从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 中绘制,或者你不需要平滑滚动。

另请参阅

QScrollArea

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。

访问函数
__init__([parent=None])#
参数:

parentQWidget

构建一个视口。

parent 参数传递给 QWidget 构造函数。

addScrollBarWidget(widget, alignment)#
参数:

widget 作为滚动条部件添加到由 alignment 指定的位置。

滚动条部件显示在水平或垂直滚动条旁边,可以放置在它的任何一边。如果您想使滚动条部件始终可见,则将相应滚动条的 scrollBarPolicy 设置为 AlwaysOn

alignment 必须是 Qt::AlignLeft 和 Qt::AlignRight 的组合,映射到水平滚动条,或 Qt::AlignTop 和 Qt::AlignBottom 的组合,映射到垂直滚动条。

可以通过重新父化部件或删除它来移除滚动条部件。还可以使用 hide() 隐藏部件。

滚动条部件将调整大小以适应当前样式的滚动条几何形状。以下描述了水平滚动条上的滚动条部件的情况:

小部件的高度将设置为匹配滚动条的高度。要控制小部件的宽度,请使用:setMinimumWidthsetMaximumWidth,或者实现sizeHint()并设置水平尺寸策略。如果需要正方形小部件,请调用 pixelMetric ( PM_ScrollBarExtent )并将宽度设置为这个值。

另请参阅

scrollBarWidgets()

cornerWidget()#
返回类型:

QWidget

返回两个滚动条之间角落中的小部件。

默认情况下,不存在角落小部件。

另请参阅

setCornerWidget()

horizontalScrollBar()#
返回类型:

QScrollBar

返回水平滚动条。

horizontalScrollBarPolicy()#
返回类型:

滚动条策略

属性 horizontalScrollBarPolicyᅟ 的获取器。

maximumViewportSize()#
返回类型:

QSize

返回视口的大小,就像滚动条没有有效的滚动范围一样。

scrollBarWidgets(alignment)#
参数:

alignmentAlignFlag 组合

返回类型:

. QWidget 列表

返回当前设置的所有滚动条小部件的列表。alignment 可以是四个位置标志的组合。

另请参阅

addScrollBarWidget()

scrollContentsBy(dx, dy)#
参数:
  • dx – int

  • dy – int

当滚动条通过 dxdy 移动时,调用此虚拟处理程序,并且相应地视图的内容应该滚动。

默认实现简单地调用整个viewport()update(),子类可以重新实现此处理程序以进行优化,或者如QScrollArea一样,移动内容部件。参数dxdy方便地存在,这样类就可以知道应该滚动多少(例如,在进行像素位移时很有用)。您也可以忽略这些值,直接滚动到滚动条指示的位置。

为程序性地滚动而调用此函数是错误的,请使用滚动条(例如,通过直接调用setValue())。

setCornerWidget(widget)#
参数:

widgetQWidget

设置两个滚动条之间的角落部件为widget

您可能还会想要将至少一个滚动条模式设置为AlwaysOn

传递None不会在角落显示任何部件。

任何以前的角落部件都将被隐藏。

您可以在不同时间以相同部件调用setCornerWidget()。

除非您在设置另一个角落部件(或None)后单独将部件重新父级化,否则在滚动区域销毁时,所有在此设置的部件都将被删除。

任何新设置的部件都应该没有当前父级。

默认情况下,不存在角落小部件。

setHorizontalScrollBar(scrollbar)#
参数:

scrollbarQScrollBar

scrollBar替换现有的水平滚动条,并将以前滚动条的滑块属性设置在新滚动条上。然后删除以前的滚动条。

QAbstractScrollArea默认提供了水平和垂直滚动条。您可以通过调用此函数用您自己的自定义滚动条替换默认的水平滚动条。

setHorizontalScrollBarPolicy(arg__1)#
参数:

arg__1ScrollBarPolicy

设置属性 horizontalScrollBarPolicyᅟ 的值。

setSizeAdjustPolicy(policy)#
参数:

policySizeAdjustPolicy

另请参阅

sizeAdjustPolicy()

设置属性 sizeAdjustPolicyᅟ 的值。

setVerticalScrollBar(scrollbar)#
参数:

scrollbarQScrollBar

scrollBar 替换现有的垂直滚动条,并将前一个滚动条的滑块属性设置到新滚动条上。然后删除前一个滚动条。

QAbstractScrollArea 默认提供垂直和水平滚动条。您可以通过调用此函数用自定义滚动条替换默认的垂直滚动条。

setVerticalScrollBarPolicy(arg__1)#
参数:

arg__1ScrollBarPolicy

设置属性 verticalScrollBarPolicyᅟ 的值。

setViewport(widget)#
参数:

widgetQWidget

将视口设置为给定的 widget。并发给定的 widget 所有的 QAbstractScrollArea

如果widgetNoneQAbstractScrollArea将为视图区域分配新的QWidget实例。

另请参阅

viewport()

setViewportMargins(margins)#
参数:

marginsQMargins

设置滚动区域的边缘margins。这对于像带有“锁定”行和列的电子表格这样的应用程序很有用。边缘空间留空;在该未使用的区域内放置小部件。

默认情况下,所有边距都为零。

另请参阅

viewportMargins()

setViewportMargins(left, top, right, bottom)
参数:
  • left – int

  • top – int

  • right – int

  • bottom – int

设置滚动区域的边缘为lefttoprightbottom。这对于像带有“锁定”行和列的电子表格这样的应用程序很有用。边缘空间留空;在该未使用的区域内放置小部件。

请注意,此函数通常由QTreeViewQTableView调用,因此边缘由QAbstractScrollArea子类实现。此外,如果子类要在项视图中使用,它们不应调用此函数。

默认情况下,所有边距都为零。

另请参阅

viewportMargins()

setupViewport(viewport)#
参数:

viewportQWidget

当调用setViewportviewport)后,QAbstractScrollArea将调用此槽。在QAbstractScrollArea的子类中重写此函数,以便在它被使用之前初始化新的viewport

另请参阅

setViewport()

sizeAdjustPolicy()#
返回类型:

尺寸调整策略

另请参阅

setSizeAdjustPolicy()

属性 `sizeAdjustPolicy` 的获取器。

verticalScrollBar()#
返回类型:

QScrollBar

返回垂直滚动条。

verticalScrollBarPolicy()#
返回类型:

滚动条策略

属性 `verticalScrollBarPolicy` 的获取器。

viewport()#
返回类型:

QWidget

返回视口小部件。

使用 `widget()` 函数检索视口小部件的内容。

另请参阅

setViewport() widget()

viewportEvent(arg__1)#
参数:

arg__1QEvent

返回类型:

bool

滚动区域(viewport 小部件)的主事件处理器。它处理指定的 `event`,并且可以被子类调用以提供合理的默认行为。

返回 true 以指示事件系统事件已被处理,不再需要进一步处理;否则返回 false 以指示事件应该被进一步传递。

你可以在子类中实现此函数,但我们建议使用其中一个专门的额外处理器。

处理视口事件的专用处理函数包括:paintEvent()mousePressEvent()mouseReleaseEvent()mouseDoubleClickEvent()mouseMoveEvent()wheelEvent()dragEnterEvent()dragMoveEvent()dragLeaveEvent()dropEvent()contextMenuEvent()resizeEvent()

viewportMargins()#
返回类型:

QMargins

返回滚动区域周围的边距。默认情况下,所有边距均为零。

另请参阅

setViewportMargins()

viewportSizeHint()#
返回类型:

QSize

返回视图的建议大小。默认实现返回视图大小,没有可见的滚动条。