在QWidget派生的主类中添加菜单

时间:2012-05-21 11:54:58

标签: c++ qt menu qwidget

我正在尝试在Qt中创建一个包含菜单的程序。主类派生自QWidget,我知道我可以使用QMainWindow来使用函数menuBar(),但我不能在QMainWindow中使用布局。我尝试使用setMenuBar在窗口的布局中添加QMenuBar,但它不会像使用menuBar()那样显示,我不知道如何将其设置为下拉菜单。

This is the menu added with setMenuBar

This is the menu added with menuBar()

3 个答案:

答案 0 :(得分:6)

QVBoxLayout *boxLayout = new QVBoxLayout(this); // Main layout of widget

QMenuBar* menuBar = new QMenuBar();
QMenu *fileMenu = new QMenu("File");
menuBar->addMenu(fileMenu);
fileMenu->addAction("Save");
fileMenu->addAction("Exit");

this->layout()->setMenuBar(menuBar);

在上面的代码中我使用了widget布局的菜单栏。

答案 1 :(得分:2)

您可以在QMainWindow中使用布局。您需要提供一个中央窗口小部件。在这个小部件中,您可以像在独立的QWidget中一样使用布局。

如果您不需要QMainWindow提供的其他内容(状态和工具栏),您只需创建QMenuBar并将其放在合适布局的顶部即可添加菜单,然后为其添加QMenu。但我不知道这是否适用于窗口管理器将菜单栏放在窗口外,如Ubuntu中的OS X和Unity。

所以QMainWindow应该是要走的路。尝试将您的布局添加到centralWidget(),而不是添加到主窗口本身。

答案 2 :(得分:1)

您需要创建一个 QMenuBar 对象并将其添加到您的布局中。然后调用 addMenu 功能将菜单添加到菜单栏。添加菜单后,您可以调用 addAction 功能添加菜单项并连接其触发信号以处理用户点击。

我找到了一个详细的教程,解释了如何执行此操作:Qt QWidget add menu bar