addAction("AFir-6ren">
gpt4 book ai didi

c++ - 如果 QMenu 是 unique_ptr,为什么 QAction 不添加到 QMenu?

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:34 26 4
gpt4 key购买 nike

代码示例:

auto fileMenu = std::make_unique<QMenu>(this->menuBar()->addMenu("First"));
fileMenu->addAction("AFirst");

auto x = this->menuBar()->addMenu("Second");
x->addAction("ASecond");

结果:

我在菜单栏中有 2 个菜单,但在第一个菜单中 - 由于某种原因,没有任何操作。第二个菜单正确地具有操作。

我尝试了不同的方法,例如类成员指针等,但这是最短的示例 - 如果 QMenu 是 unique_ptr,则缺少 QAction。谁能为我解释一下?父窗口是 QMainWindow,以防万一。

系统信息:Win8.1 x64,编译器为 VS2013,Qt 5.4 x32。

最佳答案

在这一行中:

auto fileMenu = std::make_unique<QMenu>(this->menuBar()->addMenu("First"));

fileMenu 成为一个新的 QMenu 对象(使用 this constructor )。这与:

std::unique_ptr<QMenu> fileMenu(new QMenu(this->menuBar()->addMenu("First")));

然后,您将 QAction 添加到这个临时的新菜单。

第二种情况:

auto x = this->menuBar()->addMenu("Second");
x->addAction("ASecond");

x 成为指向现有菜单的指针。这就是区别。

无论如何,通常您不应该使用std::unique_ptr 来持有QObject。在 Qt 中,有一种约定,您可以通过为每个 QObject 分配父对象来形成一棵树。父级递归地删除它的子级,您不应该手动管理它们,否则在某些特定情况下可能会导致双重释放。

关于c++ - 如果 QMenu 是 unique_ptr,为什么 QAction 不添加到 QMenu?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30833045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com