【问题标题】:Global menu in Qt with QtMenuBarQt 中的全局菜单与 QtMenuBar
【发布时间】:2011-12-30 02:18:08
【问题描述】:

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

#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();
}

菜单.h

#ifndef MENU_H
#define MENU_H

#include <QMenuBar>

class Menu : public QMenuBar
{
    Q_OBJECT

public:
    Menu(QMenuBar *parent = 0);
};

#endif // MENU_H

菜单.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);
}

我做错了什么?

【问题讨论】:

  • 你似乎也忘记了让你成为菜单栏的窗口父级

标签: c++ qt


【解决方案1】:

您的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);
}

【讨论】:

    猜你喜欢
    • 2018-05-15
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多