PySide6.QtWidgets.QAbstractScrollArea¶
- 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ᅟ
- 垂直滚动条的策略
方法¶
def
__init__()
def
cornerWidget()
def
setViewport()
def
viewport()
虚拟方法¶
def
setupViewport()
def
viewportEvent()
注意
本文档可能包含从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。
- Access functions:
- property sizeAdjustPolicyᅟ: QAbstractScrollArea.SizeAdjustPolicy¶
此属性保存描述当视口大小改变时滚动区域大小如何变化的策略。
默认策略是
AdjustIgnored
。更改此属性可能会实际调整滚动区域的大小。- Access functions:
- property verticalScrollBarPolicyᅟ: Qt.ScrollBarPolicy¶
此属性保存垂直滚动条的策略。
默认策略是 Qt::ScrollBarAsNeeded。
- Access functions:
构建一个视口。
parent
参数被发送到QWidget
构造函数。- addScrollBarWidget(widget, alignment)¶
- Parameters:
widget –
QWidget
alignment –
AlignmentFlag
的组合
将
widget
添加为滚动条小部件,位置由alignment
指定。滚动条小部件显示在水平或垂直滚动条旁边,可以放置在滚动条的任一侧。如果您希望滚动条小部件始终可见,请将相应滚动条的scrollBarPolicy设置为
AlwaysOn
。alignment
必须是 Qt::Alignleft 和 Qt::AlignRight 中的一个,它们对应于水平滚动条,或者是 Qt::AlignTop 和 Qt::AlignBottom,它们对应于垂直滚动条。可以通过重新设置小部件的父级或删除它来移除滚动条小部件。也可以使用
hide()
来隐藏小部件。滚动条小部件将被调整大小以适应当前样式的滚动条几何形状。以下描述了水平滚动条上的滚动条小部件的情况:
小部件的高度将设置为与滚动条的高度相匹配。要控制小部件的宽度,请使用
setMinimumWidth
和setMaximumWidth
,或者实现sizeHint()
并设置水平大小策略。如果你想要一个方形的小部件,调用pixelMetric
(PM_ScrollBarExtent
) 并将宽度设置为该值。另请参阅
返回位于两个滚动条之间角落的小部件。
默认情况下,没有角落小部件。
另请参阅
- horizontalScrollBar()¶
- Return type:
返回水平滚动条。
- horizontalScrollBarPolicy()¶
- Return type:
属性
horizontalScrollBarPolicyᅟ
的获取器。返回视口的大小,假设滚动条没有有效的滚动范围。
- scrollBarWidgets(alignment)¶
- Parameters:
alignment –
AlignmentFlag
的组合- Return type:
.列表的 QWidget
返回当前设置的滚动条小部件列表。
alignment
可以是四个位置标志的任意组合。另请参阅
- scrollContentsBy(dx, dy)¶
- Parameters:
dx – 整数
dy – 整数
当滚动条被
dx
,dy
移动时,会调用此虚拟处理程序,因此视口的内容应相应滚动。默认实现只是简单地调用整个
viewport()
上的update()
,子类可以重新实现此处理程序以进行优化,或者像QScrollArea
一样移动内容小部件。参数dx
和dy
是为了方便起见,以便类知道应该滚动多少(例如在进行像素移动时很有用)。你也可以忽略这些值,直接滚动到滚动条指示的位置。以编程方式调用此函数进行滚动是错误的,请使用滚动条代替(例如直接调用
setValue()
)。将小部件设置在两个滚动条之间的角落为
widget
。你可能还希望将至少一个滚动条模式设置为
AlwaysOn
。传递
None
在角落不显示小部件。任何先前的角落小部件都被隐藏。
您可以在不同的时间使用相同的widget调用setCornerWidget()。
除非在设置其他角落小部件(或
None
)后单独重新设置小部件的父级,否则此处设置的所有小部件将在滚动区域销毁时被删除。任何新设置的小部件都不应有当前的父级。
默认情况下,没有角落小部件。
- setHorizontalScrollBar(scrollbar)¶
- Parameters:
滚动条 –
QScrollBar
用
scrollBar
替换现有的水平滚动条,并将所有旧滚动条的滑块属性设置到新的滚动条上。然后删除旧的滚动条。QAbstractScrollArea
默认已经提供了水平和垂直滚动条。你可以调用这个函数来用你自己的自定义滚动条替换默认的水平滚动条。- setHorizontalScrollBarPolicy(arg__1)¶
- Parameters:
arg__1 –
ScrollBarPolicy
属性
horizontalScrollBarPolicyᅟ
的设置器。- setSizeAdjustPolicy(policy)¶
- Parameters:
策略 –
SizeAdjustPolicy
另请参阅
属性
sizeAdjustPolicyᅟ
的设置器。- setVerticalScrollBar(scrollbar)¶
- Parameters:
滚动条 –
QScrollBar
用
scrollBar
替换现有的垂直滚动条,并将所有原滚动条的滑块属性设置到新的滚动条上。然后删除原滚动条。QAbstractScrollArea
默认已经提供了垂直和水平滚动条。你可以调用这个函数来用你自己的自定义滚动条替换默认的垂直滚动条。- setVerticalScrollBarPolicy(arg__1)¶
- Parameters:
arg__1 –
ScrollBarPolicy
属性
verticalScrollBarPolicyᅟ
的设置器。将视口设置为给定的
widget
。QAbstractScrollArea
将拥有给定的widget
的所有权。如果
widget
是None
,QAbstractScrollArea
将为视口分配一个新的QWidget
实例。另请参阅
设置滚动区域周围的
边距
。这对于诸如具有“锁定”行和列的电子表格等应用程序非常有用。边距空间留空;将小部件放置在未使用的区域中。默认情况下,所有边距为零。
另请参阅
- setViewportMargins(left, top, right, bottom)
- Parameters:
left – int
top – int
right – int
bottom – int
设置滚动区域周围的边距为
left
、top
、right
和bottom
。这对于诸如带有“锁定”行和列的电子表格等应用程序非常有用。边距空间留空;将小部件放置在未使用的区域中。请注意,此函数经常被
QTreeView
和QTableView
调用,因此边距必须由QAbstractScrollArea
的子类实现。此外,如果子类要在项目视图中使用,它们不应调用此函数。默认情况下,所有边距为零。
另请参阅
这个槽由
QAbstractScrollArea
在调用setViewport
(viewport
)之后调用。在QAbstractScrollArea
的子类中重新实现此函数,以在使用新的viewport
之前对其进行初始化。另请参阅
- sizeAdjustPolicy()¶
- Return type:
属性
sizeAdjustPolicyᅟ
的获取器。- verticalScrollBar()¶
- Return type:
返回垂直滚动条。
- verticalScrollBarPolicy()¶
- Return type:
属性
verticalScrollBarPolicyᅟ
的获取器。返回视口小部件。
使用
widget()
函数来检索视口小部件的内容。另请参阅
滚动区域的主要事件处理程序(
viewport()
小部件)。它处理指定的event
,并且可以由子类调用以提供合理的默认行为。返回
true
以向事件系统指示事件已被处理,无需进一步处理;否则返回false
以指示事件应进一步传播。您可以在子类中重新实现此函数,但我们建议使用专门的事件处理程序之一。
用于视口事件的专门处理程序包括:
paintEvent()
、mousePressEvent()
、mouseReleaseEvent()
、mouseDoubleClickEvent()
、mouseMoveEvent()
、wheelEvent()
、dragEnterEvent()
、dragMoveEvent()
、dragLeaveEvent()
、dropEvent()
、contextMenuEvent()
和resizeEvent()
。返回滚动区域周围的边距。默认情况下,所有边距均为零。
另请参阅
返回视口的推荐大小。默认实现返回
viewport()
->sizeHint()
。请注意,该大小仅为视口的大小,不包含任何可见的滚动条。