Глобальное меню в Qt с QtMenuBar - PullRequest
0 голосов
/ 29 декабря 2011

Я новичок в 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();
}

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

Что я делаю не так?

1 Ответ

2 голосов
/ 29 декабря 2011

Ваш класс 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...