QDockWidget 在使用智能指针重写代码时不显示



我想在屏幕上显示一个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中删除。

<。 <。/div>

相关内容

  • 没有找到相关文章

最新更新