QGraphicsLinearLayout Class
QGraphicsLinearLayout 类提供了一种水平或垂直布局,用于在 Graphics View 中管理小部件。更多内容...
| 标题: | #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 与QVBoxLayout 和QHBoxLayout 非常相似,但与这些类不同的是,它用于管理QGraphicsWidget 和QGraphicsLayout ,而不是QWidget 和QLayout 。
另请参阅 QGraphicsGridLayout 和QGraphicsWidget 。
成员函数文档
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 上的stretch 片段插入到index 当前所含的任意条目之前。
另请参阅 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()。
© 2026 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.