问题
I have been having problems adding a menu item to the built in menu bar in a Qt desktop application. I copied the code provided in the QMainWindow class reference documentation for creating a menu to a very simple application. Unfortunately, it did not show up when the code was run. I am simply trying to add a “File” menu to the menu bar. I am running Mac OSX 10.9.3 and Qt Creator 5.3.1.
The screenshots of my code are below. I tried both the uncommented and commented code in the mainwindow.cpp source.
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
//myMenuBar = menuBar();
//fileMenu = myMenuBar -> addMenu(tr("&File"));
fileMenu = menuBar() -> addMenu(tr("&File"));
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QMenuBar* myMenuBar;
QMenu* fileMenu;
};
#endif //MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
ComeOnMenuBar.pro
#-------------------------------------------------
#
# Project created by QtCreator 2014-08-12T02:28:33
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ComeOnMenuBar
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
Any help would be really appreciated! Thank you!
Note: I know using setNativeMenuBar(false) works, but I would like the mac os native menu bar to work: the one that is displayed in the top-most left corner.
回答1:
I had same issued in ubuntu with python
I used menubar's setNativeMenubar method. You can find this in c++ pyqt docs.
menu = self.menuBar()
menu.setNativeMenuBar(False)
回答2:
It's pretty old Qt bug on OS X. You can work with QMenu and QMenuBar by calling QMenuBar::addAction, QMenuBar::removeAction and QMenuBar::insertAction. The trick is done by calling of QMenu::menuAction method.
Check the code below:
QMenu *menu = new QMenu("First menu");
menu->addAction("item 1");
menu->addAction("item 2");
m_menuBar->addAction(menu->menuAction());
Also you can check my another answer here with code snippet ready to compile and run.
回答3:
I know its late by 4 yrs, but i ran into same issue & spotted this on the Qt forum for ubuntu/Mac OS.
https://forum.qt.io/topic/7276/menu-not-showing-up-in-menubar/15
Add the following to your main.cpp before you declare your Mainwindow w:
QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuBar);
In my case my main.cpp file now looks like:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
AddressBook addressBook;
AddressBookController controller (&addressBook);
QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuBar); //fix for menubar notshowing in ubuntu
MainWindow w(&controller);
w.show();
return a.exec();
}
回答4:
The answer that has the most upvote works for Python, but question is for C++. However, the method is the same.
You can add this line on top of your constructor in mainwindow.cpp:
menuBar()->setNativeMenuBar(false);
回答5:
menu = self.menuBar()
menu.setNativeMenuBar(False)
来源:https://stackoverflow.com/questions/25261760/menubar-not-showing-for-simple-qmainwindow-code-qt-creator-mac-os