У меня были проблемы с добавлением пункта меню во встроенную строку меню в приложении Qt для настольных ПК. Я скопировал код, предоставленный в справочной документации класса QMainWindow, для создания меню в очень простое приложение. К сожалению, он не обнаружился при запуске кода. Я просто пытаюсь добавить меню «Файл» в строку меню. Я использую Mac OSX 10.9.3 и Qt Creator 5.3.1.
Скриншоты моего кода ниже. Я попробовал и незакомментированный и закомментированный код в источнике mainwindow.cpp.
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 = appSOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
Любая помощь могла бы быть полезна! Спасибо!
Примечание: я знаю, что использование setNativeMenuBar (false) работает, но мне бы хотелось, чтобы работала панель меню Mac OS: та, которая отображается в самом верхнем левом углу.
Я же выпустил в убунту с питон
Я использовал метод setNativeMenubar меню menubar. Вы можете найти это в документации по C ++ Pyqt.
menu = self.menuBar()
menu.setNativeMenuBar(False)
Это довольно старая ошибка Qt в OS X. Вы можете работать с QMenu и QMenuBar, вызывая QMenuBar :: addAction, QMenuBar :: removeAction и QMenuBar :: insertAction.
Хитрость заключается в вызове метода QMenu :: menuAction.
Проверьте код ниже:
QMenu *menu = new QMenu("First menu");
menu->addAction("item 1");
menu->addAction("item 2");
m_menuBar->addAction(menu->menuAction());
Также вы можете проверить мой другой ответ Вот с фрагментом кода, готовым для компиляции и запуска.
Ответ с наибольшим количеством голосов работает для Python, но вопрос для C ++. Однако метод тот же.
Вы можете добавить эту строку поверх вашего конструктора в mainwindow.cpp:
menuBar()->setNativeMenuBar(false);
Я знаю, что уже поздно, к 4 годам, но я столкнулся с той же проблемой & заметил это на форуме Qt для Ubuntu / Mac OS.
https://forum.qt.io/topic/7276/menu-not-showing-up-in-menubar/15
Добавьте следующее в ваш main.cpp, прежде чем объявить свое Mainwindow w:
QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuBar);
В моем случае мой файл main.cpp теперь выглядит так:
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();
}
menu = self.menuBar()
menu.setNativeMenuBar (False)