Qt全局菜单与QtMenuBar

Global menu in Qt with QtMenuBar

本文关键字:QtMenuBar 菜单 全局 Qt      更新时间:2023-10-16

我是c++和Qt的新手,我在起步时遇到了一点麻烦。我真的很感激你的帮助。我想添加一个菜单栏,将保持不变的所有应用程序屏幕。如果我将它添加到main函数中,菜单栏显示得很好,但我知道这不应该出现在main函数中:

#include <QtGui/QApplication>
#include "mainwindow.h"
#include "form.h"
#include "menu.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    QMenuBar *menu = new QMenuBar(0);
    QMenu* menu1 = new QMenu("MENU1");
    menu1->addMenu(new QMenu("menu1_SubMenu"));
    QMenu* menu2 = new QMenu("MENU2");
    menu2->addMenu(new QMenu("menu2_SubMenu"));
    menu->addMenu(menu1);
    menu->addMenu(menu2);
    w.show();
    return a.exec();
}

如果我为菜单栏创建一个类,它不会出现。唯一的区别是,我把菜单代码放在了菜单类的构造函数中,然后从main.cpp实例化了菜单类:

main.cpp

#include <QtGui/QApplication>
#include "mainwindow.h"
#include "form.h"
#include "menu.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    Menu m;
    m.show();
    w.show();
    return a.exec();
}

menu.h

#ifndef MENU_H
#define MENU_H
#include <QMenuBar>
class Menu : public QMenuBar
{
    Q_OBJECT
public:
    Menu(QMenuBar *parent = 0);
};
#endif // MENU_H

menu.cpp

#include "menu.h"
Menu::Menu(QMenuBar *parent)
{
    QMenuBar *menu = new QMenuBar(0);
    QMenu* menu1 = new QMenu("MENU1");
    menu1->addMenu(new QMenu("menu1_SubMenu"));
    QMenu* menu2 = new QMenu("MENU2");
    menu2->addMenu(new QMenu("menu2_SubMenu"));
    menu->addMenu(menu1);
    menu->addMenu(menu2);
}

我做错了什么?

您的Menu类派生自QMenuBar,但除了show()之外,您没有对其调用任何方法。所有addMenu()调用都是针对构造函数中的局部变量menu进行的,它被分配然后被遗忘。你应该在this上调用它们:

#include "menu.h"
Menu::Menu(QMenuBar *parent)
{
    QMenu* menu1 = new QMenu("MENU1");
    menu1->addMenu(new QMenu("menu1_SubMenu"));
    QMenu* menu2 = new QMenu("MENU2");
    menu2->addMenu(new QMenu("menu2_SubMenu"));
    this->addMenu(menu1);
    this->addMenu(menu2);
}