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

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

This is the menu added with setMenuBar

This is the menu added with menuBar()


你有尝试在这里查看吗:这里 - undefined
3
事实上,您可以在QMainWindow中使用布局。只需创建一个空白窗口部件,将其设置为主窗口的中心窗口部件并将布局分配给此窗口部件即可。这样应该可以正常工作。 - undefined
使用QLayout::setMenuBar()似乎有效。展示你尝试过的代码。 - undefined
3个回答

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

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


3
您可以在QMainWindow中使用布局。 您需要提供一个中央小部件。 在此小部件内,您可以像在独立的QWidget中一样使用布局。
如果您不需要QMainWindow提供的其他内容(状态和工具栏),则只需创建QMenuBar并将其放置在适当布局的顶部,然后向其中添加QMenu即可添加菜单。 但我不知道这是否适用于窗口管理器将菜单栏放在窗口之外的情况,例如OS X和Ubuntu中的Unity。
因此,QMainWindow应该是最好的选择。 尝试将您的布局添加到centralWidget(),而不是添加到主窗口本身。

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

我找到了一份详细的教程,解释了如何完成这个过程:Qt QWidget 添加菜单栏


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接