PySide6.QtWidgets.QAbstractScrollArea

class QAbstractScrollArea

QAbstractScrollArea 小部件提供了一个带有按需滚动条的滚动区域。更多

PySide6.QtWidgets.QAbstractScrollArea 的继承图

继承自: QTextEdit, QTextBrowser, QScrollArea, QPlainTextEdit, QMdiArea, QGraphicsView, QAbstractItemView, QTreeView, QTreeWidget, QHelpContentWidget, QTableView, QTableWidget, QListView, QUndoView, QListWidget, QHelpIndexWidget, QHeaderView, QColumnView, QPdfView, QChartView

概要

属性

方法

虚拟方法

注意

本文档可能包含从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。

Access functions:
property sizeAdjustPolicyᅟ: QAbstractScrollArea.SizeAdjustPolicy

此属性保存描述当视口大小改变时滚动区域大小如何变化的策略。

默认策略是AdjustIgnored。更改此属性可能会实际调整滚动区域的大小。

Access functions:
property verticalScrollBarPolicyᅟ: Qt.ScrollBarPolicy

此属性保存垂直滚动条的策略。

默认策略是 Qt::ScrollBarAsNeeded。

Access functions:
__init__([parent=None])
Parameters:

父级QWidget

构建一个视口。

parent 参数被发送到 QWidget 构造函数。

addScrollBarWidget(widget, alignment)
Parameters:

widget添加为滚动条小部件,位置由alignment指定。

滚动条小部件显示在水平或垂直滚动条旁边,可以放置在滚动条的任一侧。如果您希望滚动条小部件始终可见,请将相应滚动条的scrollBarPolicy设置为AlwaysOn

alignment 必须是 Qt::Alignleft 和 Qt::AlignRight 中的一个,它们对应于水平滚动条,或者是 Qt::AlignTop 和 Qt::AlignBottom,它们对应于垂直滚动条。

可以通过重新设置小部件的父级或删除它来移除滚动条小部件。也可以使用hide()来隐藏小部件。

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

小部件的高度将设置为与滚动条的高度相匹配。要控制小部件的宽度,请使用 setMinimumWidthsetMaximumWidth,或者实现 sizeHint() 并设置水平大小策略。如果你想要一个方形的小部件,调用 pixelMetric ( PM_ScrollBarExtent ) 并将宽度设置为该值。

另请参阅

scrollBarWidgets()

cornerWidget()
Return type:

QWidget

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

默认情况下,没有角落小部件。

另请参阅

setCornerWidget()

horizontalScrollBar()
Return type:

QScrollBar

返回水平滚动条。

horizontalScrollBarPolicy()
Return type:

ScrollBarPolicy

属性 horizontalScrollBarPolicyᅟ 的获取器。

maximumViewportSize()
Return type:

QSize

返回视口的大小,假设滚动条没有有效的滚动范围。

scrollBarWidgets(alignment)
Parameters:

alignmentAlignmentFlag 的组合

Return type:

.列表的 QWidget

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

另请参阅

addScrollBarWidget()

scrollContentsBy(dx, dy)
Parameters:
  • dx – 整数

  • dy – 整数

当滚动条被 dx, dy 移动时,会调用此虚拟处理程序,因此视口的内容应相应滚动。

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

以编程方式调用此函数进行滚动是错误的,请使用滚动条代替(例如直接调用setValue())。

setCornerWidget(widget)
Parameters:

widgetQWidget

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

你可能还希望将至少一个滚动条模式设置为AlwaysOn

传递 None 在角落不显示小部件。

任何先前的角落小部件都被隐藏。

您可以在不同的时间使用相同的widget调用setCornerWidget()。

除非在设置其他角落小部件(或None)后单独重新设置小部件的父级,否则此处设置的所有小部件将在滚动区域销毁时被删除。

任何设置的小部件都不应有当前的父级。

默认情况下,没有角落小部件。

setHorizontalScrollBar(scrollbar)
Parameters:

滚动条QScrollBar

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

QAbstractScrollArea 默认已经提供了水平和垂直滚动条。你可以调用这个函数来用你自己的自定义滚动条替换默认的水平滚动条。

setHorizontalScrollBarPolicy(arg__1)
Parameters:

arg__1ScrollBarPolicy

属性 horizontalScrollBarPolicyᅟ 的设置器。

setSizeAdjustPolicy(policy)
Parameters:

策略SizeAdjustPolicy

另请参阅

sizeAdjustPolicy()

属性 sizeAdjustPolicyᅟ 的设置器。

setVerticalScrollBar(scrollbar)
Parameters:

滚动条QScrollBar

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

QAbstractScrollArea 默认已经提供了垂直和水平滚动条。你可以调用这个函数来用你自己的自定义滚动条替换默认的垂直滚动条。

setVerticalScrollBarPolicy(arg__1)
Parameters:

arg__1ScrollBarPolicy

属性 verticalScrollBarPolicyᅟ 的设置器。

setViewport(widget)
Parameters:

widgetQWidget

将视口设置为给定的widgetQAbstractScrollArea将拥有给定的widget的所有权。

如果 widgetNoneQAbstractScrollArea 将为视口分配一个新的 QWidget 实例。

另请参阅

viewport()

setViewportMargins(margins)
Parameters:

边距QMargins

设置滚动区域周围的边距。这对于诸如具有“锁定”行和列的电子表格等应用程序非常有用。边距空间留空;将小部件放置在未使用的区域中。

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

另请参阅

viewportMargins()

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

  • top – int

  • right – int

  • bottom – int

设置滚动区域周围的边距为lefttoprightbottom。这对于诸如带有“锁定”行和列的电子表格等应用程序非常有用。边距空间留空;将小部件放置在未使用的区域中。

请注意,此函数经常被QTreeViewQTableView调用,因此边距必须由QAbstractScrollArea的子类实现。此外,如果子类要在项目视图中使用,它们不应调用此函数。

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

另请参阅

viewportMargins()

setupViewport(viewport)
Parameters:

视口QWidget

这个槽由QAbstractScrollArea在调用setViewport (viewport)之后调用。在QAbstractScrollArea的子类中重新实现此函数,以在使用新的viewport之前对其进行初始化。

另请参阅

setViewport()

sizeAdjustPolicy()
Return type:

SizeAdjustPolicy

另请参阅

setSizeAdjustPolicy()

属性 sizeAdjustPolicyᅟ 的获取器。

verticalScrollBar()
Return type:

QScrollBar

返回垂直滚动条。

verticalScrollBarPolicy()
Return type:

ScrollBarPolicy

属性 verticalScrollBarPolicyᅟ 的获取器。

viewport()
Return type:

QWidget

返回视口小部件。

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

另请参阅

setViewport() widget()

viewportEvent(event)
Parameters:

事件QEvent

Return type:

布尔

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

返回 true 以向事件系统指示事件已被处理,无需进一步处理;否则返回 false 以指示事件应进一步传播。

您可以在子类中重新实现此函数,但我们建议使用专门的事件处理程序之一。

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

viewportMargins()
Return type:

QMargins

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

另请参阅

setViewportMargins()

viewportSizeHint()
Return type:

QSize

返回视口的推荐大小。默认实现返回 viewport() -> sizeHint()。请注意,该大小仅为视口的大小,不包含任何可见的滚动条。