Панель меню не отображается для простого кода QMainWindow, Qt Creator Mac OS

У меня были проблемы с добавлением пункта меню во встроенную строку меню в приложении 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: та, которая отображается в самом верхнем левом углу.

7

Решение

Я же выпустил в убунту с питон

Я использовал метод setNativeMenubar меню menubar. Вы можете найти это в документации по C ++ Pyqt.

    menu = self.menuBar()
menu.setNativeMenuBar(False)
9

Другие решения

Это довольно старая ошибка 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());

Также вы можете проверить мой другой ответ Вот с фрагментом кода, готовым для компиляции и запуска.

2

Ответ с наибольшим количеством голосов работает для Python, но вопрос для C ++. Однако метод тот же.

Вы можете добавить эту строку поверх вашего конструктора в mainwindow.cpp:

menuBar()->setNativeMenuBar(false);
2

Я знаю, что уже поздно, к 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();

}

1
menu = self.menuBar()

menu.setNativeMenuBar (False)

-2
По вопросам рекламы [email protected]