我有一些使用 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
是私有(private)成员(member)QLabel* label
.我的问题是:我是否负责删除 label
在Dock
的析构函数?
我尝试更改代码以便 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”被销毁时它会被自动删除,但当我关闭程序时会出现错误。
最佳答案
为了正确设置 objects tree您需要执行以下操作:
- 首先创建容器小部件,
- 创建子部件并设置它的父部件,
- 创建容器小部件的布局,
- 将小部件添加到布局。
下面是演示上述方法的代码:
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);
}
关于c++ - 什么时候在 Qt 中删除小部件(QVBoxLayout 类)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51066334/