QScrollArea 类

QScrollArea 类提供对另一个小部件的滚动视图。 更多...

头文件 #include <QScrollArea>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QAbstractScrollArea

属性

公共函数

QScrollArea(QWidget *parent = nullptr)
virtual~QScrollArea()
Qt::Alignmentalignment() const
voidensureVisible(int x, int y, int xmargin = 50, int ymargin = 50)
voidensureWidgetVisible(QWidget *childWidget, int xmargin = 50, int ymargin = 50)
voidsetAlignment(Qt::Alignment)
voidsetWidget(QWidget *widget)
voidsetWidgetResizable(bool resizable)
QWidget *takeWidget()
QWidget *widget() const
boolwidgetResizable() const

重实现的公共函数

virtual boolfocusNextPrevChild(bool next) override
virtual QSizesizeHint() const override

重实现的受保护函数

virtual boolevent(QEvent *e) override
virtual booleventFilter(QObject *o, QEvent *e) override
virtual voidresizeEvent(QResizeEvent *) override
virtual voidscrollContentsBy(int dx, int dy) override
virtual QSizeviewportSizeHint() const override

详细描述

滚动区域用于在框架中显示子小部件的内容。如果小部件超出框架大小,视图可以提供滚动条以便查看子小部件的整个区域。必须使用 setWidget() 来指定子小部件。例如

QLabel *imageLabel = new QLabel;
QImage image("happyguy.png");
imageLabel->setPixmap(QPixmap::fromImage(image));

scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);

上面的代码创建了一个包含图像标签的滚动区域(如下面的图片所示)。当调整图像大小时,滚动区域可以提供所需的滚动条

滚动条的外观取决于当前设置的滚动条策略。您可以使用来自QAbstractScrollArea的继承功能来控制滚动条的外观。

例如,您可以设置QAbstractScrollArea::horizontalScrollBarPolicyQAbstractScrollArea::verticalScrollBarPolicy属性。或者,如果您想让滚动条在滚动区域内容变化时动态调整,可以使用horizontalScrollBar()和verticalScrollBar()函数(这些函数可以让你访问滚动条)并通过使用QScrollBar::setValue()函数在滚动区域内容变化时设置滚动条的值。

您可以使用widget()函数获取子小部件。视图可以使用setWidgetResizable()函数使可调整大小。可以使用setAlignment()指定小部件的对齐方式。

两个便利函数ensureVisible()和ensureWidgetVisible()通过必要的滚动内容确保内容的某个区域在视口中可见。

大小提示和布局

在将滚动区域用于显示自定义小部件的内容时,确保小部件的大小提示设置为合适的值非常重要。如果使用标准QWidget作为子小部件,可能需要调用QWidget::setMinimumSize()以确保小部件的内容在滚动区域中正确显示。

如果使用滚动区域来显示包含在小部件中布局的子小部件的内容,重要的是要意识到布局的大小策略也将确定小部件的大小。如果您打算动态地更改布局的内容,这一点尤为重要。在这种情况下,将布局的size constraint属性设置为提供对布局最小和/或最大尺寸约束的属性(例如,QLayout::SetMinAndMaxSize),将导致滚动区域的大小在布局内容变化时更新。

另请参阅QAbstractScrollAreaQScrollBar

属性文档

alignment : Qt::Alignment

此属性包含滚动区域小部件的对齐方式

有效对齐是以下标志的组合

  • Qt::AlignLeft
  • Qt::AlignHCenter
  • Qt::AlignRight
  • Qt::AlignTop
  • Qt::AlignVCenter
  • Qt::AlignBottom

默认情况下,小部件保持在滚动区域左上角的位置。

访问函数

Qt::Alignmentalignment() const
voidsetAlignment(Qt::Alignment)

widgetResizable : bool

此属性包含滚动区域是否应该调整视图小部件的大小

如果将此属性设置为false(默认值),则滚动区域将尊重其小部件的大小。无论此属性如何,您都可以使用widget()->resize()来程序化地调整小部件的大小,滚动区域将自动调整自己以适应新的大小。

如果将此属性设置为true,则滚动区域将自动调整小部件的大小,以避免不必要的滚动条,或利用额外的空间。

访问函数

boolwidgetResizable() const
voidsetWidgetResizable(bool resizable)

成员函数文档

[显式] QScrollArea::QScrollArea(QWidget *parent = nullptr)

根据给定的parent构造一个空的滚动区域。

另请参阅setWidget().

[虚拟 noexcept] QScrollArea::~QScrollArea()

销毁滚动区域及其子部件。

另请参阅setWidget().

void QScrollArea::ensureVisible(int x, int y, int xmargin = 50, int ymargin = 50)

滚动滚动区域的内容,使点(x, y)在具有通过指定的像素边界的视口区域内可见。如果指定的点无法到达,则将内容滚动到最近的合法位置。两个边界的默认值都是50像素。

void QScrollArea::ensureWidgetVisible(QWidget *childWidget, int xmargin = 50, int ymargin = 50)

滚动滚动区域的内容,使QScrollArea::widget()的 childWidget 在视口内可见,并且通过指定的像素边界。如果指定的点无法到达,则将内容滚动到最近的合法位置。两个边界的默认值都是50像素。

[覆盖虚受保护] bool QScrollArea::event(QEvent *e)

重实现:QAbstractScrollArea::event(QEvent *event).

[覆盖虚受保护] bool QScrollArea::eventFilter(QObject *o, QEvent *e)

重实现:QObject::eventFilter(QObject *watched, QEvent *event).

[覆盖虚] bool QScrollArea::focusNextPrevChild(bool next)

重实现:QWidget::focusNextPrevChild(bool next).

[覆盖虚受保护] void QScrollArea::resizeEvent(QResizeEvent *)

重实现:QAbstractScrollArea::resizeEvent(QResizeEvent *event).

[覆盖虚受保护] void QScrollArea::scrollContentsBy(int dx, int dy)

重实现:QAbstractScrollArea::scrollContentsBy(int dx, int dy).

void QScrollArea::setWidget(QWidget *widget)

设置滚动区域widget

widget成为滚动区域的子项,并且在滚动区域被删除或设置新控件时将被销毁。

小部件的 autoFillBackground 属性将被设置为 true

如果在小部件 添加时 滚动区域可见,您必须显式地调用 show()。

请注意,您必须在小部件之前调用此函数之前添加布局;如果稍后添加,小部件将不可见 - 无论您何时通过 show() 滚动区域。在这种情况下,您也不能稍后通过 show() 小部件。

另请参阅小部件

[覆盖虚函数] QSize QScrollArea::sizeHint() const

重实现: QAbstractScrollArea::sizeHint() const

QWidget *QScrollArea::takeWidget()

移除滚动区域的小部件,并将小部件的所有权传递给调用者。

另请参阅小部件

[覆盖虚受保护函数] QSize QScrollArea::viewportSizeHint() const

重实现: QAbstractScrollArea::viewportSizeHint() const

QWidget *QScrollArea::widget() const

返回滚动区域的小部件,如果没有则返回 nullptr

另请参阅setWidget().

© 2024 The Qt Company Ltd. 本文档贡献的文档版权属于其各自的所有者。本提供的文档根据自由软件基金会的发布,许可使用 GNU自由文档许可版1.3。Qt及相应的标志是芬兰及/或全球其他地区The Qt Company Ltd的商标。其他所有商标属于其各自的所有者。