9

Qt デスクトップ アプリケーションのビルトイン メニュー バーにメニュー項目を追加する際に問題が発生しています。QMainWindow クラスのリファレンス ドキュメントで提供されている、メニューを作成するためのコードを非常に単純なアプリケーションにコピーしました。残念ながら、コードを実行しても表示されませんでした。メニューバーに「ファイル」メニューを追加しようとしています。Mac OSX 10.9.3 と Qt Creator 5.3.1 を実行しています。

私のコードのスクリーンショットは以下のとおりです。mainwindow.cpp ソースで、コメントなしとコメント付きの両方のコードを試しました。

メインウィンドウ.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;
}

メインウィンドウ.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

どんな助けでも本当に感謝します! ありがとうございました!

注: setNativeMenuBar(false) の使用が機能することはわかっていますが、Mac OS のネイティブ メニュー バー (左上隅に表示されるもの) を機能させたいと考えています。

4

6 に答える 6

13

私はpythonを使ってubuntuで同じものを発行しました

menubar の setNativeMenubar メソッドを使用しました。これは、c++ pyqt ドキュメントで見つけることができます。

    menu = self.menuBar()
    menu.setNativeMenuBar(False)
于 2014-12-10T11:52:12.000 に答える
4

これは、OS X のかなり古い Qt バグです。QMenuBar::addAction、QMenuBar::removeAction、QMenuBar::insertAction を呼び出すことで、QMenu と QMenuBar を操作できます。このトリックは、QMenu::menuAction メソッドを呼び出すことによって行われます。

以下のコードを確認してください。

QMenu *menu = new QMenu("First menu");
menu->addAction("item 1");
menu->addAction("item 2");
m_menuBar->addAction(menu->menuAction());

また、コンパイルして実行する準備ができたコードスニペットを使用して、ここで私の別の回答を確認できます。

于 2014-09-24T05:09:35.830 に答える
-1
menu = self.menuBar()

menu.setNativeMenuBar(False)

于 2016-04-20T16:19:50.170 に答える