图形视图(23):【类】QGraphicsGridLayout[官翻]

QGraphicsGridLayout 类

QGraphicsGridLayout类为管理图形视图中的小部件提供了一个网格布局。

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

详述

使用QGraphicsGridLayout最常见的方法是在堆上构造一个没有父对象的对象,通过调用addItem()添加小部件和布局,最后通过调用QGraphicsWidget::setLayout()将布局分配给小部件。当您添加项目时,QGraphicsGridLayout自动计算网格的尺寸。

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

 QGraphicsGridLayout *layout = new QGraphicsGridLayout;
 layout->addItem(textEdit, 0, 0);
 layout->addItem(pushButton, 0, 1);

 QGraphicsWidget *form = new QGraphicsWidget;
 form->setLayout(layout);
 scene.addItem(form);

布局获得项目的所有权。在某些情况下,当布局项也继承自QGraphicsItem(例如QGraphicsWidget )时,所有权会有歧义,因为布局项属于两个所有权层次结构。请参阅QGraphicsLayoutItem::setOwnedByLayout()如何处理这个文档。您可以通过调用count()和itemAt()来访问布局中的每个项目。调用removeAt()将从布局中删除一个项目,而不会销毁它。

QGraphicsGridLayout中的大小提示和大小策略

QGraphicsGridLayout尊重每个项目的大小提示和大小策略,当网格中的单元格有超过项目所能填满的空间时,每个项目将根据该项目的布局对齐方式进行排列。您可以通过调用setAlignment()为每个项目设置对齐方式,并通过调用alignment()检查任何项目的对齐方式。还可以通过分别调用setRowAlignment()和setColumnAlignment()来设置整行或整列的对齐方式。默认情况下,项目对齐到左上角。

参见QGraphicsLinearLayout和QGraphicsWidget。

公共函数

构造和析构

  1. QGraphicsGridLayout(QGraphicsLayoutItem *parent = nullptr)
  2. virtual ~QGraphicsGridLayout()

增删迭代项目

  1. void addItem(QGraphicsLayoutItem *item, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
  2. void addItem(QGraphicsLayoutItem *item, int row, int column, Qt::Alignment alignment = Qt::Alignment())
  3. void removeItem(QGraphicsLayoutItem *item)
  4. QGraphicsLayoutItem * itemAt(int row, int column) const

行、列数

  1. int columnCount() const
  2. int rowCount() const

对齐

  1. Qt::Alignment alignment(QGraphicsLayoutItem *item) const
    void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment)
  2. Qt::Alignment columnAlignment(int column) const
    void setColumnAlignment(int column, Qt::Alignment alignment)
  3. Qt::Alignment rowAlignment(int row) const
    void setRowAlignment(int row, Qt::Alignment alignment)

宽、高

  1. qreal columnMaximumWidth(int column) const
    void setColumnMaximumWidth(int column, qreal width)
  2. qreal columnMinimumWidth(int column) const
    void setColumnMinimumWidth(int column, qreal width)
  3. qreal columnPreferredWidth(int column) const
    void setColumnPreferredWidth(int column, qreal width)
  4. qreal rowMaximumHeight(int row) const
    void setRowMaximumHeight(int row, qreal height)
  5. qreal rowMinimumHeight(int row) const
    void setRowMinimumHeight(int row, qreal height)
  6. qreal rowPreferredHeight(int row) const
    void setRowPreferredHeight(int row, qreal height)
  7. void setColumnFixedWidth(int column, qreal width)
    void setRowFixedHeight(int row, qreal height)

间距

  1. qreal columnSpacing(int column) const
    void setColumnSpacing(int column, qreal spacing)
  2. qreal rowSpacing(int row) const
    void setRowSpacing(int row, qreal spacing)
  3. qreal horizontalSpacing() const
    void setHorizontalSpacing(qreal spacing)
  4. qreal verticalSpacing() const
    void setVerticalSpacing(qreal spacing)
  5. void setSpacing(qreal spacing)

拉伸

  1. int columnStretchFactor(int column) const
    void setColumnStretchFactor(int column, int stretch)
  2. int rowStretchFactor(int row) const
    void setRowStretchFactor(int row, int stretch)

重写的公共函数

数量

  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"));

    QGraphicsGridLayout *layout = new QGraphicsGridLayout();
    layout->addItem(textEdit,    0, 0, 2, 1);
    layout->addItem(pushButton,  0, 1);
    layout->addItem(pushButton1, 1, 1);
    layout->setAlignment (pushButton1,Qt::AlignBaseline);

//    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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值