我是 C++ 新手,我正在尝试使用 QAction 和 QMenu 在 Qt 中创建简单的菜单栏,当我使用 new 创建 QAction 对象时,它可以工作并且我在菜单栏中看到该项目,但是当我尝试创建一个对象时不使用新键虽然它运行没有问题,该项目没有出现在菜单栏中。我只想知道为什么会这样。
QMenu* _fileMenu=menuBar()->addMenu("&File");
QAction* _openAction=new QAction("&Open",this);
QAction* _saveAction=new QAction("&Save",this);
QAction helpAction("&Help",this);
QAction* helpPointer=&helpAction;
_fileMenu->addAction(_openAction);//works fine
_fileMenu->addAction(_saveAction);//works fine
_fileMenu->addAction(helpPointer);//Doesnt show any changes
答案 0 :(得分:0)
因为您在堆栈上创建了 helpAction
,并且在您离开创建它的函数的作用域后它会立即被销毁。因此,它通过 helpPointer
临时添加到菜单中,但是,就在函数结束时,它被销毁并因此从菜单中删除。所以函数的最终结果是 helpAction
在菜单中不存在,因为当函数完成时它根本不存在。
如果你想把它放在菜单中,你必须动态分配它。这通常通过关键字 new
完成。