首先看一下布局器大概的类关系及数据信息
以GridLayout为例进行说明,我们一般使用additem方法,参数传入的是QLayoutItem对象,如添加QSpacerItem(继承自QLayoutItem,调用additem方法),它就没有widget相关信息了。
如果addwidget添加widget时,实际上是new的QWidgetItem,里面会保存wid信息,它是继承自QLayoutItem的,然后additem,传入刚才new的QWidgetItem。
void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment)
{
addChildWidget(widget); // 设置父对象,将widget的parent设置为layout的parent
QWidgetItem *b = QLayoutPrivate::createWidgetItem(this, widget); // new一个QWidgetItem,QWidgetItem是继承自QLayoutItem的
addItem(b, row, column, 1, 1, alignment);
}
后面会new一个QGridBox,new的时候会保存前面的QLayoutItem值到_item中