1

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

这是使用 setMenuBar 添加的菜单

这是使用 menuBar() 添加的菜单

4

3 回答 3

9
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);

在上面的代码中,我使用了小部件布局的菜单栏。

于 2015-01-28T05:43:58.133 回答
2

You can use layouts in a QMainWindow. You need to provide a central widget. Within this widget, you can use a layout like you would in a stand-alone QWidget.

If you don't need the other stuff provided by QMainWindow (status and tool bars), you can add a menu by just creating a QMenuBar and placing it at the top of a suitable layout, then adding a QMenu to it. But I don't know if this works for window managers putting the menu bar outside the window, like OS X and Unity in Ubuntu do.

So QMainWindow should be the way to go. Try adding your layout to the centralWidget(), not to the main window itself.

于 2012-05-21T14:45:01.343 回答
1

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

我找到了一个详细的教程来解释如何做到这一点:Qt QWidget add menu bar

于 2014-05-03T08:13:14.883 回答