QLayout作为Qt的界面布局利器,使用起来确实非常的方便:
继承关系
QLayoutItem
QLayout(还继承自QOBject)
QBoxLayout
QVBoxLayout
QHBoxLayout
QFormLayout
QGridLayout
QGraphicsLayout
QStackedLayout
QSpacerItem
QWidgetItem
QObject
作为QLayout的父类,QLayoutItem提供了下列方法,包括绘制和范围的信息:
virtual QSize sizeHint() const = 0
virtual QRect geometry() const = 0
virtual void invalidate()
virtual QLayout * layout()
Qt::Alignment alignment() const
QLayout提供的信息就比较多了:提供了子页面、子Layout的添加接口,设置边界、菜单项等的接口
virtual void addItem(QLayoutItem *item) = 0
void addWidget(QWidget*w)
void setContentsMargins(intleft, int top, int right, int bottom)
void setMenuBar(QWidget*widget)
QBoxLayout作为QLayout的子类,提供了一些额外的信息:提供元素的拉伸比例,添加空元素等
void addLayout(QLayout*layout, int stretch = 0)
void addSpacerItem(QSpacerItem*spacerItem)
void addSpacing(intsize)
bool setStretchFactor(QWidget*widget, int stretch)
bool setStretchFactor(QLayout*layout, int stretch)
界面的继承情况,在http://doc.qt.io/qt-5/qlayout.html有详细的介绍,不做额外的介绍。
使用的过程的例子介绍一些:
// 设置边界为0 QHBoxLayout *pLayout1 = new QHBoxLayout(); QHBoxLayout *pLayout2 = new QHBoxLayout(); pLayout1->setMargin(0); pLayout2->setMargin(0);
// 设置拉伸比例2:3 pLayoutMain->addLayout(pLayout1); pLayoutMain->addLayout(pLayout2); pLayoutMain->setStretch(0, 2); pLayoutMain->setStretch(1, 3);
// 底面边距设0 int left = 0, right = 0, top = 0, bottom = 0; pMainLayout->getContentsMargins(&left, &top, &right, &bottom); pMainLayout->setContentsMargins(left, right, top, 0);
// 添加填充弹簧条 pLayout1->addItem(new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum));
// 元素设置位置:左对齐,上下居中 pLabel->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
// 设置固定高度 pLabel->setFixedHeight(21);
// 设置固定宽度 pLabel->setFixedWidth(21); |
个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)