当你在Qt中使用setLayout时,布局会变成你的孩子吗?

Do Layouts become your children when you use setLayout in Qt

本文关键字:孩子 布局 Qt setLayout 当你      更新时间:2023-10-16

代码:

class MyWidget: public QWidget
{
  public:
    MyWidget();
    ~MyWidget();
  private:
    QHBoxLayout* theLayout;
    QVBoxLayout* subLayout1;
    QVBoxLayout* subLayout2;
    //More subLayouts
}
MyWidget::MyWidget()
{
  theLayout = new QHBoxLayout();
  subLayout1 = new QVBoxLayout();
  subLayout2 = new QVBoxLayout();
  //More subLayouts
  //-------- Fill subLayouts with widgets using addWidget --------
  theLayout->addLayout(subLayout1);
  theLayout->addLayout(subLayout2);
  //add all subLayouts
  setLayout(theLayout);
}
MyWidget::~MyWidget()
{
  //Destructor with nothing in it
}

**注意:布局是类的成员。

所以我知道,在子布局填充的小部件现在是MyWidget的孩子(或者至少这是我认为如果不请告诉我),所以我不需要在解构器中删除它们(Qt清理它们正确吗?),但布局也是MyWidget的孩子还是我需要在解构器中删除这些?

正如文档所说,setLayout调用将表示给定的布局。因此,这个小部件将是它的父部件,因此您不需要手动删除它。

我认为如果可能的话,应该使用带实参的构造函数。而且你不需要将布局存储为成员如果你只是初始化它们