Qt(QVBoxLayout类)中的小部件何时删除?
When are widgets deleted in Qt (QVBoxLayout class)?
我有一些简单的代码来使用Qt创建一个新的小部件:
Dock::Dock() : QDockWidget() {
label = new QLabel(QLatin1String("TEST"));
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(label, 0, Qt::AlignTop);
layout->addStretch(-1);
QWidget* multiWidget = new QWidget();
multiWidget->setLayout(layout);
setWidget(multiWidget);
}
其中label
是私人会员QLabel* label
. 我的问题是:我是否负责删除Dock
析构函数中的label
?
我尝试更改代码,以便label
是一个std::shared_ptr<QLabel>
:
Dock::Dock() : QDockWidget() {
label = std::make_shared<QLabel>(QLatin1String("TEST"));
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(label.get(), 0, Qt::AlignTop);
layout->addStretch(-1);
QWidget* multiWidget = new QWidget();
multiWidget->setLayout(layout);
setWidget(multiWidget);
}
以便在"Dock"被销毁时自动删除它,但在关闭程序时出现错误。
为了正确设置对象树,您需要执行以下操作:
- 首先创建容器小部件,
- 创建子小部件并设置其父小部件,
- 创建容器小部件的布局,
- 将微件添加到布局。
以下是演示上述方法的代码:
Dock::Dock()
:
QDockWidget()
{
QWidget* multiWidget = new QWidget;
label = new QLabel(QLatin1String("TEST"), multiWidget); // Set parent
QVBoxLayout* layout = new QVBoxLayout(multiWidget); // Sets layout
layout->addWidget(label, 0, Qt::AlignTop);
layout->addStretch(-1);
setWidget(multiWidget);
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 最小硬币更换问题(自上而下方法)
- Qt VTK交互风格的信号到小部件
- 何时在引用或唯一指针上使用移动语义
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 使用递归的数组的最小值.这是怎么回事
- 为什么在浮点中从大到小会引入更多的误差
- 何时提供默认参数作为模板参数
- 找到两对数字,使它们的乘积的绝对差最小化
- C++-明确何时以及如何调用析构函数
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 最大和最小 1 C++函数
- Qt(QVBoxLayout类)中的小部件何时删除?
- 何时应找到附加到模型的边界框的最小值和最大值
- QT中的小部件可见性更改后,小部件将何时更新
- QT-检测所有小部件何时首次完成调整大小
- C++ 创建小部件数组
- Qt小部件何时获得paintEvent
- 何时在小部件上调用update()