QGraphicsLinearLayout Class

QGraphicsLinearLayout 类为管理图形视图中的部件提供了水平或垂直布局。更多

Header: #include <QGraphicsLinearLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承: QGraphicsLayout

公共函数

QGraphicsLinearLayout(QGraphicsLayoutItem *parent = nullptr)
QGraphicsLinearLayout(Qt::Orientation orientation, QGraphicsLayoutItem *parent = nullptr)
virtual ~QGraphicsLinearLayout()
void addItem(QGraphicsLayoutItem *item)
void addStretch(int stretch = 1)
Qt::Alignment alignment(QGraphicsLayoutItem *item) const
void insertItem(int index, QGraphicsLayoutItem *item)
void insertStretch(int index, int stretch = 1)
qreal itemSpacing(int index) const
Qt::Orientation orientation() const
void removeItem(QGraphicsLayoutItem *item)
void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment)
void setItemSpacing(int index, qreal spacing)
void setOrientation(Qt::Orientation orientation)
void setSpacing(qreal spacing)
void setStretchFactor(QGraphicsLayoutItem *item, int stretch)
qreal spacing() const
int stretchFactor(QGraphicsLayoutItem *item) const

重新实现的公共函数

virtual int count() const override
virtual void invalidate() override
virtual QGraphicsLayoutItem *itemAt(int index) const override
virtual void removeAt(int index) override
virtual void setGeometry(const QRectF &rect) override
virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override

详细说明

线性布局的默认方向是Qt::Horizontal 。您可以通过调用setOrientation() 或向 QGraphicsLinearLayout 的构造函数传递Qt::Vertical 来选择垂直方向。

使用 QGraphicsLinearLayout 的最常见方法是在堆上构造一个对象,将父部件传递给构造函数,然后通过调用addItem() 添加部件和布局。

QGraphicsScene scene;
QGraphicsWidget *textEdit = scene.addWidget(new QTextEdit);
QGraphicsWidget *pushButton = scene.addWidget(new QPushButton);

QGraphicsWidget *form = new QGraphicsWidget;
scene.addItem(form);

QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(form);
layout->addItem(textEdit);
layout->addItem(pushButton);

另外,如果没有向布局的构造函数传递父部件,则需要调用QGraphicsWidget::setLayout() 将此布局设置为该部件的顶层布局,该部件将获得布局的所有权。

您可以在线性布局中添加部件、布局、拉伸(addStretch(),insertStretch() 或setStretchFactor()) 和间隔(setItemSpacing()) 。布局拥有这些项目的所有权。在某些情况下,当布局项也继承自QGraphicsItem 时(如QGraphicsWidget ),由于布局项属于两个所有权层次,因此在所有权方面会出现歧义。请参阅QGraphicsLayoutItem::setOwnedByLayout() 的文档,了解如何处理这种情况。您可以通过调用count() 和itemAt() 访问布局中的每个项目。调用removeAt() 或removeItem() 将从布局中移除一个项目,但不会销毁它。

QGraphicsLinearLayout 中的尺寸提示和尺寸策略

QGraphicsLinearLayout 尊重每个项目的尺寸提示和尺寸策略,当布局包含的空间超过项目所能填充的空间时,每个项目将根据布局的对齐方式进行排列。你可以通过调用setAlignment() 为每个项目设置对齐方式,也可以通过调用alignment() 检查任何项目的对齐方式。默认情况下,项目的对齐方式为左上角对齐。

QGraphicsLinearLayout 内的间距

在项目之间,布局会分配一些空间。实际间距取决于托管部件的当前样式,但常用间距为 4。您也可以通过调用setSpacing() 设置自己的间距,并通过调用spacing() 获取当前间距值。如果要为项目配置单独的间距,可以调用setItemSpacing() 。

QGraphicsLinearLayout 中的拉伸因子

您可以为每个项目分配一个拉伸因子,以控制与其他项目相比,该项目将获得多少空间。默认情况下,线性布局中排列的两个相同部件的大小相同,但如果第一个部件的拉伸因子为 1,第二个部件的拉伸因子为 2,则第一个部件将获得可用空间的 1/3,第二个部件将获得 2/3。

QGraphicsLinearLayout 计算大小分布的方法是将所有项目的拉伸系数相加,然后相应地划分可用空间。所有项目的默认拉伸系数都是 0;系数为 0 意味着项目没有任何定义的拉伸系数;实际上,这与将拉伸系数设置为 1 是一样的。 拉伸系数只适用于布局长度方向(按照布局方向)上的可用空间。如果您想同时控制项目的水平和垂直拉伸,可以使用QGraphicsGridLayout 代替。

QGraphicsLinearLayout 与其他布局的比较

QGraphicsLinearLayout 与QVBoxLayoutQHBoxLayout 非常相似,但与这些类不同的是,它用于管理QGraphicsWidgetQGraphicsLayout ,而不是QWidgetQLayout

另请参阅 QGraphicsGridLayoutQGraphicsWidget

成员函数文档

QGraphicsLinearLayout::QGraphicsLinearLayout(QGraphicsLayoutItem *parent = nullptr)

使用Qt::Horizontal 构建一个 QGraphicsLinearLayout 实例。parent 将传递给QGraphicsLayout 的构造函数。

QGraphicsLinearLayout::QGraphicsLinearLayout(Qt::Orientation orientation, QGraphicsLayoutItem *parent = nullptr)

构造一个 QGraphicsLinearLayout 实例。您可以为布局传递orientation (水平或垂直),parent 将传递给QGraphicsLayout 的构造函数。

[virtual noexcept] QGraphicsLinearLayout::~QGraphicsLinearLayout()

销毁QGraphicsLinearLayout 对象。

void QGraphicsLinearLayout::addItem(QGraphicsLayoutItem *item)

此方便函数等同于调用insertItem(-1,item)。

void QGraphicsLinearLayout::addStretch(int stretch = 1)

此方便函数等同于调用insertStretch(-1,stretch)。

Qt::Alignment QGraphicsLinearLayout::alignment(QGraphicsLayoutItem *item) const

返回item 的对齐方式。默认对齐方式为Qt::AlignTop |Qt::AlignLeft

对齐方式决定了在布局中可用空间大于部件所占空间的情况下,项目在指定空间内的定位方式。

另请参阅 setAlignment() 。

[override virtual] int QGraphicsLinearLayout::count() const

重实现:QGraphicsLayout::count() const.

void QGraphicsLinearLayout::insertItem(int index, QGraphicsLayoutItem *item)

item 插入index 的布局中,或插入当前位于index 的任何项目之前。

另请参阅 addItem()、itemAt()、insertStretch() 和setItemSpacing()。

void QGraphicsLinearLayout::insertStretch(int index, int stretch = 1)

index 或当前位于index 的任何项目之前插入stretch 的延伸部分。

另请参见 addStretch()、setStretchFactor()、setItemSpacing() 和insertItem()。

[override virtual] void QGraphicsLinearLayout::invalidate()

重新实现:QGraphicsLayout::invalidate().

[override virtual] QGraphicsLayoutItem *QGraphicsLinearLayout::itemAt(int index) const

重实现:QGraphicsLayout::itemAt(int i) const.

当从 0 开始迭代时,它将按视觉排列顺序返回项目。

qreal QGraphicsLinearLayout::itemSpacing(int index) const

返回index 项目后的间距。

另请参见 setItemSpacing().

Qt::Orientation QGraphicsLinearLayout::orientation() const

返回布局方向。

另请参阅 setOrientation()。

[override virtual] void QGraphicsLinearLayout::removeAt(int index)

重实现:QGraphicsLayout::removeAt(int index)。

删除index 中的项目而不销毁它。项目的所有权将转移给调用者。

另请参阅 removeItem() 和insertItem()。

void QGraphicsLinearLayout::removeItem(QGraphicsLayoutItem *item)

item 从布局中删除,但不销毁它。item 的所有权将转移给调用者。

另请参阅 removeAt() 和insertItem()。

void QGraphicsLinearLayout::setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment)

item 的对齐方式设置为alignment 。如果item 的对齐方式发生变化,布局将自动失效。

另请参阅 alignment() 和invalidate()。

[override virtual] void QGraphicsLinearLayout::setGeometry(const QRectF &rect)

重实现:QGraphicsLayoutItem::setGeometry(const QRectF &rect).

void QGraphicsLinearLayout::setItemSpacing(int index, qreal spacing)

index 项目后的间距设置为spacing

另请参阅 itemSpacing() 。

void QGraphicsLinearLayout::setOrientation(Qt::Orientation orientation)

将布局方向更改为orientation 。更改布局方向会使布局自动失效。

另请参阅 orientation() 。

void QGraphicsLinearLayout::setSpacing(qreal spacing)

将布局的间距设置为spacing 。间距是指项目之间的垂直和水平距离。

另请参阅 spacing()、setItemSpacing()、setStretchFactor() 和QGraphicsGridLayout::setSpacing() 。

void QGraphicsLinearLayout::setStretchFactor(QGraphicsLayoutItem *item, int stretch)

item 的拉伸因数设置为stretch 。如果项目的拉伸因数发生变化,该函数将使布局无效。

stretch 设置为 0 会删除项目的拉伸因数,实际上等同于将stretch 设置为 1。

另请参阅 stretchFactor() 。

[override virtual] QSizeF QGraphicsLinearLayout::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const

重实现:QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const.

qreal QGraphicsLinearLayout::spacing() const

返回布局的间距。间距指项目之间的垂直和水平距离。

另请参阅 setSpacing()。

int QGraphicsLinearLayout::stretchFactor(QGraphicsLayoutItem *item) const

返回item 的拉伸系数。默认拉伸因数为 0,即项目没有指定拉伸因数。

另请参阅 setStretchFactor() 。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.