【发布时间】:2015-06-14 18:31:43
【问题描述】:
代码示例:
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。
【问题讨论】:
-
嗯。我希望使用 std::unique_ptr 导致双重删除,因为当父级超出范围时 Qt 将删除子级。
-
您不应该将
QMenu包裹在unique_ptr中;它已经由菜单栏管理。 -
QAction 没有被包裹,QMenu 被包裹在这里。
-
抱歉,已更正。我正在查看文档中
addMenu的另一个重载,即返回QAction。 -
您的 std::unique_ptr 文件菜单是否超出范围?也许您的 fileMenu 已经被释放但仍连接到父级并且您正在体验 UB。