我想在屏幕上显示一个QDockWidget
,因此我使用了此代码:
QDockWidget *dock = new QDockWidget("Title-1", this) //'this' is the main window
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
this->addDockWidget(Qt::LeftDockWidgetArea, dock);
,它正如我预期的那样起作用:QDockWidget
出现在屏幕上
但是,当我尝试重写实现智能指针的代码时,它不会显示在屏幕上。这是代码(我包括<memory>
(:
std::unique_ptr<QDockWidget> dock(new QDockWidget("Project", this));
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
addDockWidget(Qt::LeftDockWidgetArea, dock.get());
有人可以解释为什么它不起作用吗?
qt使用对象树的概念&amp;所有权,尤其是GUI类(QWidget
的衍生物(。如果将父级QWidget
传递给QWidget
的构造函数,则孩子将在父母破坏时自动破坏。因此,您不需要这些类的智能指针类型。
使用智能指针可能会过早地破坏您的QDockWidget
(即,当唯一的指针范围不在范围时,例如,在局部变量的函数返回时(,因此该项目将从父 QWidget
中删除。