2011-12-29 22 views
0

我是C++和Qt的新手,而且我在開始時遇到了一些麻煩。我真的很感謝一些幫助。我想添加一個對所有應用程序屏幕保持不變的菜單欄。如果我加入到這個主要功能,菜單欄精細顯示出來,但我知道這不應該是我的主要功能:在Qt中使用QtMenuBar的全局菜單

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

我在做什麼錯?

+0

也似乎忘記了,使菜單欄的窗口,你父 – 2011-12-29 19:27:45

回答

2

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

你說得對,謝爾蓋=)。謝謝你的幫助! – 2011-12-29 18:13:17