文章目录
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。
公共函数
构造和析构
- QGraphicsLinearLayout(Qt::Orientation orientation, QGraphicsLayoutItem *parent = nullptr)
- QGraphicsLinearLayout(QGraphicsLayoutItem *parent = nullptr)
- virtual ~QGraphicsLinearLayout()
增加删除
- void addItem(QGraphicsLayoutItem *item)
void insertItem(int index, QGraphicsLayoutItem *item)
void removeItem(QGraphicsLayoutItem *item) - void addStretch(int stretch = 1)
void insertStretch(int index, int stretch = 1)
拉伸因子
- int stretchFactor(QGraphicsLayoutItem *item) const
void setStretchFactor(QGraphicsLayoutItem *item, int stretch)
对齐
- Qt::Alignment alignment(QGraphicsLayoutItem *item) const
void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment)
间距
- qreal itemSpacing(int index) const
void setItemSpacing(int index, qreal spacing) - qreal spacing() const
void setSpacing(qreal spacing)
方向
- Qt::Orientation orientation() const
- void setOrientation(Qt::Orientation orientation)
重写的公共函数
数量
- 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"));
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();
}