25-容器和容器控件-滚动区域基类QAbstractScrollArea

滚动区域基类QAbstractScrollArea

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

其子类包含: QTextEdit, QTextBrowser, QScrollArea, QPlainTextEdit, QMdiArea, QGraphicsView, QAbstractItemView, QTreeView, QTreeWidget, QHelpContentWidget, QTableView, QTableWidget, QListView, QUndoView, QListWidget, QHelpIndexWidget, QHeaderView, QColumnView, QPdfView, QChartView

from PySide6.QtWidgets import QAbstractScrollArea

QAbstractScrollArea(self, parent: Union[PySide6.QtWidgets.QWidget, NoneType] = None)

构造视口。
父参数被发送到QWidget构造函数。

QAbstractScrollArea官方描述

QAbstractScrollArea是滚动区域的低级抽象。该区域提供了一个名为视口的中央小部件,其中该区域的内容将被滚动 (即,内容的可见部分在视口中呈现)。

视口旁边是垂直滚动条,下面是水平滚动条。当所有区域内容都适合视口时,根据滚动条的滚动条策略,每个滚动条可以是可见的或隐藏的。隐藏滚动条时,视口会扩展以覆盖所有可用空间。当滚动条再次变得可见时,视口会缩小,以便为滚动条腾出空间。

可以在视口周围保留一个边距区域,请参阅setviewportmargin ()。该功能主要用于在滚动区域上方或旁边放置QHeaderView小部件。Qabstracscrollarea的子类应该实现边距。

继承QAbstractScrollArea时,您需要执行以下操作:

  • 通过设置滚动条的范围,值,页面步长并跟踪其移动来控制滚动条。
  • 根据滚动条的值在视口中绘制区域的内容。
  • 在viewportEvent() 中处理视口接收的事件-特别是调整事件大小。
  • 使用viewport->update() 更新视口的内容,而不是update(),因为所有绘画操作都在视口上进行。

使用scrollbarasneed (默认值) 的滚动条策略,qabstracscrollarea在提供非零滚动范围时显示滚动条,否则将其隐藏。

每当视口收到调整大小事件或内容大小发生变化时,应更新滚动条和视口。当滚动条值发生变化时,视口也需要更新。当区域接收到新内容时,通常会设置滚动条的初始值。

我们举一个简单的例子,其中我们实现了一个滚动区域,可以滚动任何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()。为了微调滚动行为,请连接到滚动条的actiontrided () 信号并根据需要调整滑块位置。

为方便起见,QAbstractScrollArea使所有视口事件在virtual viewportEvent() 处理程序中可用。在有意义的情况下,QWidget的专用处理程序会重新映射到视口事件。重新映射的专门处理程序是: paintEvent(),mousePressEvent(),moussereleaseevent (),mousedobleckevent (),mouseMoveEvent(),wheelEvent(),dragMoveEvent(),dragMoveEvent(),dropEvent(),contextMenuEvent() 和resizeEvent()。

继承QAbstractScrollArea的QScrollArea为任何QWidget提供了平滑的滚动 (即,widget逐像素滚动)。你只需要子类QAbstractScrollArea,如果你需要更专业的行为。例如,如果该区域的全部内容不适合在QWidget上绘制,或者如果您不希望平滑滚动,则这是正确的。

QAbstractScrollArea属性

属性描述功能访问
horizontalScrollBarPolicy: ScrollBarPolicy此属性保存水平滚动条的策略。
默认策略是scrollbarasnenee。
horizontalScrollBarPolicy ()

setHorizontalScrollBarPolicy (arg__1)
sizeAdjustPolicy: SizeAdjustPolicy此属性包含描述当视口大小改变时滚动区域大小如何改变的策略。
默认策略是AdjustIgnored。更改此属性实际上可能会调整scrollarea的大小。
sizeAdjustPolicy ()

setSizeAdjustPolicy (policy)
verticalScrollBarPolicy: ScrollBarPolicy此属性保存垂直滚动条的策略。
默认策略是scrollbarasnenee。
verticalScrollBarPolicy ()

setVerticalScrollBarPolicy (arg__1)

QAbstractScrollArea方法

  • PySide6.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy

    此枚举指定当视口的大小发生变化时,qabstracscrollarea的大小提示应如何调整。

    ConstantDescription
    QAbstractScrollArea.AdjustIgnored滚动区域的行为将像以前一样-并且不做任何调整。
    QAbstractScrollArea.AdjustToContents滚动区域将始终调整到视口
    QAbstractScrollArea.AdjustToContentsOnFirstShow滚动区域将在第一次显示时调整到其视口。
方法描述
addScrollBarWidget(widget: PySide6.QtWidgets.QWidget, alignment: PySide6.QtCore.Qt.AlignmentFlag)在对齐方式指定的位置中添加小部件作为滚动条小部件。
滚动条小部件显示在水平或垂直滚动条旁边,并且可以放置在其两侧。如果希望滚动条小部件始终可见,请将相应滚动条的滚动条策略设置为AlwaysOn。
对齐必须是Qt::Alignleft和AlignRight (映射到水平滚动条) 或AlignTop和AlignBottom (映射到垂直滚动条) 之一。
可以通过重新养育小部件或删除它来删除滚动条小部件。也可以使用hide() 隐藏小部件
将调整滚动条小部件的大小,以适合当前样式的滚动条几何形状。下面介绍了水平滚动条上的滚动条小部件的情况:
小部件的高度将被设置为匹配滚动条的高度。要控制小部件的宽度,请使用setMinimumWidth和setMaximumWidth,或者实现sizeHint() 并设置水平大小策略。如果您想要一个方形小部件,请调用pixelMetric (PM_ScrollBarExtent) 并将宽度设置为该值。
cornerWidget() -> PySide6.QtWidgets.QWidget将两个滚动条之间的角落中的小部件设置为小部件。
您可能还希望将至少一种滚动条模式设置为AlwaysOn。
传递无显示角落没有小部件。
任何先前的角落小部件都是隐藏的。
您可以在不同时间使用相同的小部件调用setCornerWidget()。
此处设置的所有小部件在被销毁时都会被滚动区域删除,除非您在设置了其他一些角小部件 (或没有) 后单独重新设置小部件。
任何新设置的小部件都应该没有当前父项。
默认情况下,不存在角落小部件。
horizontalScrollBar() -> PySide6.QtWidgets.QScrollBar返回水平滚动条。
horizontalScrollBarPolicy() -> PySide6.QtCore.Qt.ScrollBarPolicy获取属性horizontalScrollBarPolicy
maximumViewportSize() -> PySide6.QtCore.QSize返回视口的大小,就好像滚动条没有有效的滚动范围一样。
scrollBarWidgets(alignment: PySide6.QtCore.Qt.AlignmentFlag) -> List[PySide6.QtWidgets.QWidget]返回当前设置的滚动条小部件的列表。对齐可以是四个位置标志的任意组合。
setCornerWidget(widget: PySide6.QtWidgets.QWidget)将两个滚动条之间的角落中的小部件设置为小部件。
您可能还希望将至少一种滚动条模式设置为AlwaysOn。
传递无显示角落没有小部件。
任何先前的角落小部件都是隐藏的。
您可以在不同时间使用相同的小部件调用setCornerWidget()。
此处设置的所有小部件在被销毁时都会被滚动区域删除,除非您在设置了其他一些角小部件 (或没有) 后单独重新设置小部件。
任何新设置的小部件都应该没有当前父项。
默认情况下,不存在角落小部件。
setHorizontalScrollBar(scrollbar: PySide6.QtWidgets.QScrollBar)用滚动条替换现有的水平滚动条,并在新滚动条上设置所有前滚动条的滑块属性。然后删除以前的滚动条。
默认情况下,QAbstractScrollArea已经提供了水平和垂直滚动条。您可以调用此函数将默认的水平滚动条替换为您自己的自定义滚动条。
setHorizontalScrollBarPolicy(arg__1: PySide6.QtCore.Qt.ScrollBarPolicy)设置属性horizontalScrollBarPolicy
setSizeAdjustPolicy(policy: PySide6.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy)获取sizeAdjustPolicy
setVerticalScrollBar(scrollbar: PySide6.QtWidgets.QScrollBar)用滚动条替换现有的垂直滚动条,并在新滚动条上设置所有前滚动条的滑块属性。然后删除以前的滚动条。
默认情况下,QAbstractScrollArea已经提供了垂直和水平滚动条。您可以调用此函数将默认的垂直滚动条替换为您自己的自定义滚动条。
setVerticalScrollBarPolicy(arg__1: PySide6.QtCore.Qt.ScrollBarPolicy)设置属性verticalScrollBarPolicy
setViewport(widget: PySide6.QtWidgets.QWidget)将视口设置为给定的小部件。Qabstracscrollarea将获得给定小部件的所有权。
如果widget为None,则qabstracscrollarea将为视口分配一个新的QWidget实例。
setViewportMargins(left: int, top: int, right: int, bottom: int)
setViewportMargins(margins: PySide6.QtCore.QMargins)
将滚动区域周围的边距设置为左、上、右和下。这对于诸如具有 “锁定” 行和列的电子表格之类的应用程序很有用。边缘空间留空; 将小部件放在未使用的区域中。
请注意,这个函数经常由QTreeView和QTableView调用,因此边距必须由QAbstractScrollArea子类实现。另外,如果要在项目视图中使用子类,则不应调用此函数。
默认情况下,所有边距均为零。
sizeAdjustPolicy() -> PySide6.QtWidgets.QAbstractScrollArea.SizeAdjustPolicy获取属性 sizeAdjustPolic
verticalScrollBar() -> PySide6.QtWidgets.QScrollBar返回垂直滚动条。
verticalScrollBarPolicy() -> PySide6.QtCore.Qt.ScrollBarPolicy获取属性verticalScrollBarPolicy
viewport() -> PySide6.QtWidgets.QWidget返回视口小部件。
使用widget() 函数检索视口小部件的内容。
viewportMargins() -> PySide6.QtCore.QMargins返回滚动区域周围的边距。默认情况下,所有边距均为零。
scrollContentsBy(dx: int, dy: int)当滚动条由dx,dy移动时,将调用此虚拟处理程序,因此应相应地滚动视口的内容。
默认实现只是在整个视口 () 上调用update(),子类可以出于优化目的重新实现此处理程序,或者像QScrollArea一样移动内容小部件。为了方便起见,参数dx和dy在那里,以便类知道应该滚动多少 (例如,在进行像素移位时很有用)。您也可以忽略这些值,然后直接滚动到滚动条指示的位置。
为了以编程方式滚动而调用此函数是一个错误,请改用滚动条 (例如,通过直接调用setValue())。
setupViewport(viewport: PySide6.QtWidgets.QWidget)这个插槽是在setViewport (viewport) 被调用之后由QAbstractScrollArea调用的。在QAbstractScrollArea的子类中重新实现此函数,以在使用新视口之前对其进行初始化。
viewportEvent(arg__1: PySide6.QtCore.QEvent) -> bool滚动区域的主事件处理程序 (viewport() 小部件)。它处理指定的事件,并且可以由子类调用以提供合理的默认行为。
返回true以向事件系统指示该事件已被处理,并且无需进一步处理; 否则返回false以指示该事件应进一步传播。
您可以在子类中重新实现此函数,但是我们建议使用专用事件处理程序之一。
视口事件的专门处理程序有: paintEvent() 、mousePressEvent() 、moussereleaseevent () 、mousedobleckevent () 、mouseMoveEvent() 、wheelEvent() 、dragMoveEvent() 、droppevent () 、contextMenuEvent() 和resizeEvent()。
viewportSizeHint() -> PySide6.QtCore.QSize返回视口的建议大小。默认实现返回viewport() -> sizeHint()。请注意,大小只是视口的大小,没有任何滚动条可见。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值