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。
公共函数
构造和析构
- QGraphicsGridLayout(QGraphicsLayoutItem *parent = nullptr)
- virtual ~QGraphicsGridLayout()
增删迭代项目
- void addItem(QGraphicsLayoutItem *item, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
- void addItem(QGraphicsLayoutItem *item, int row, int column, Qt::Alignment alignment = Qt::Alignment())
- void removeItem(QGraphicsLayoutItem *item)
- QGraphicsLayoutItem * itemAt(int row, int column) const
行、列数
- int columnCount() const
- int rowCount() const
对齐
- Qt::Alignment alignment(QGraphicsLayoutItem *item) const
void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment) - Qt::Alignment columnAlignment(int column) const
void setColumnAlignment(int column, Qt::Alignment alignment) - Qt::Alignment rowAlignment(int row) const
void setRowAlignment(int row, Qt::Alignment alignment)
宽、高
- qreal columnMaximumWidth(int column) const
void setColumnMaximumWidth(int column, qreal width) - qreal columnMinimumWidth(int column) const
void setColumnMinimumWidth(int column, qreal width) - qreal columnPreferredWidth(int column) const
void setColumnPreferredWidth(int column, qreal width) - qreal rowMaximumHeight(int row) const
void setRowMaximumHeight(int row, qreal height) - qreal rowMinimumHeight(int row) const
void setRowMinimumHeight(int row, qreal height) - qreal rowPreferredHeight(int row) const
void setRowPreferredHeight(int row, qreal height) - void setColumnFixedWidth(int column, qreal width)
void setRowFixedHeight(int row, qreal height)
间距
- qreal columnSpacing(int column) const
void setColumnSpacing(int column, qreal spacing) - qreal rowSpacing(int row) const
void setRowSpacing(int row, qreal spacing) - qreal horizontalSpacing() const
void setHorizontalSpacing(qreal spacing) - qreal verticalSpacing() const
void setVerticalSpacing(qreal spacing) - void setSpacing(qreal spacing)
拉伸
- int columnStretchFactor(int column) const
void setColumnStretchFactor(int column, int stretch) - int rowStretchFactor(int row) const
void setRowStretchFactor(int row, int stretch)
重写的公共函数
数量
- 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
代码演示
#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();
}