2011-12-29 9 views
0

私はC++とQtを初めて使いました。私は本当にいくつかの助けに感謝します。私は、すべてのアプリ画面で一定のままになるメニューバーを追加したいと思います。私はmain関数にこれを追加すると、メニューバーには罰金を示しているが、私はこれが私の主な機能にはすべきではない知っている:QtのグローバルメニューQtMenuBarを使った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); 
} 

私が間違って何をしているのですか?

+0

あなたはまた)=セルゲイ、あなたが正しい –

答えて

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

メニューバーのあなたのウィンドウの親を作ることを忘れているようです。ご協力いただきありがとうございます! –

関連する問題