我正在尝试在 Qt 中创建一个包含菜单的程序。主类是从 QWidget 派生的,我知道我可以使用 QMainWindow 来使用函数 menuBar(),但是我不能在 QMainWindow 中使用布局。我尝试使用 setMenuBar 在窗口布局中添加 QMenuBar,但它不像使用 menuBar() 那样显示,而且我不知道如何使其成为下拉菜单。
3 回答
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);
在上面的代码中,我使用了小部件布局的菜单栏。
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.
您需要创建一个QMenuBar对象并将其添加到您的布局中。然后调用addMenu函数将菜单添加到菜单栏。添加菜单后,可以调用addAction函数添加菜单项,并连接其触发信号来处理用户点击。
我找到了一个详细的教程来解释如何做到这一点:Qt QWidget add menu bar