图形视图(24):【类】QGraphicsLinearLayout[官翻]

本文详细介绍了QGraphicsLinearLayout的使用方法,包括布局的方向设置、添加和删除项目、设置拉伸因子和对齐方式等功能。此外还讲解了间距设置、大小提示及与其他布局的比较等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QGraphicsLinearLayout 类

QGraphicsLinerLayout类提供了一个水平或垂直布局,用于管理图形视图中的小部件。

Header:#include < QGraphicsLinearLayout >
qmake:QT += widgets
Inherits:QGraphicsLayout
Inherited By:
Since:Qt 4.4

详述

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

使用QGraphicsLinearLayout的最常见方法是在没有父节点的堆上构造一个对象,通过调用addItem()添加小部件和布局,最后通过调用QGraphicsWidget::setLayout()将布局分配给小部件。

您可以在线性布局中添加小部件、布局、拉伸(addStretch()、insertStretch()或setStretchFactor())和间距(setItemSpacing())。

布局获得项目的所有权。在某些情况下,当布局项也继承自QGraphicsItem(例如QGraphicwidget)时,所有权会有歧义,因为布局项属于两个所有权层次结构。请参阅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。

公共函数

构造和析构

  1. QGraphicsLinearLayout(Qt::Orientation orientation, QGraphicsLayoutItem *parent = nullptr)
  2. QGraphicsLinearLayout(QGraphicsLayoutItem *parent = nullptr)
  3. virtual ~QGraphicsLinearLayout()

增加删除

  1. void addItem(QGraphicsLayoutItem *item)
    void insertItem(int index, QGraphicsLayoutItem *item)
    void removeItem(QGraphicsLayoutItem *item)
  2. void addStretch(int stretch = 1)
    void insertStretch(int index, int stretch = 1)

拉伸因子

  1. int stretchFactor(QGraphicsLayoutItem *item) const
    void setStretchFactor(QGraphicsLayoutItem *item, int stretch)

对齐

  1. Qt::Alignment alignment(QGraphicsLayoutItem *item) const
    void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment)

间距

  1. qreal itemSpacing(int index) const
    void setItemSpacing(int index, qreal spacing)
  2. qreal spacing() const
    void setSpacing(qreal spacing)

方向

  1. Qt::Orientation orientation() const
  2. void setOrientation(Qt::Orientation orientation)

重写的公共函数

数量

  1. virtual int count() const override

更新

  1. virtual void invalidate() override

项目

  1. virtual QGraphicsLayoutItem * itemAt(int index) const override
  2. virtual void removeAt(int index) override

大小

  1. virtual void setGeometry(const QRectF &rect) override
  2. virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override

代码演示

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    app.setApplicationName ("QGraphicsGridLayout");
    QGraphicsScene scene(0,0,600,400);
    QGraphicsWidget *textEdit = scene.addWidget(new QTextEdit);
    QGraphicsWidget *pushButton = scene.addWidget(new QPushButton("QPushButton"));
    QGraphicsWidget *pushButton1 = scene.addWidget(new QPushButton("QPushButton1"));

    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout;
    layout->addItem(textEdit);
    layout->addItem(pushButton);
    layout->addItem(pushButton1);
    layout->setAlignment (pushButton1,Qt::AlignCenter);

//    qDebug() << layout->maximumSize ();
    layout->setMaximumHeight (layout->maximumWidth ());

    QGraphicsWidget *form = new QGraphicsWidget(nullptr, Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
    QPalette palette=form->palette ();
    palette.setBrush (QPalette::Background,Qt::red);
    form->setPalette (palette);
    form->setLayout(layout);
    form->setPos (10,50);
    scene.addItem(form);

    QGraphicsView view(&scene);
    view.show ();
    return app.exec();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值