如何将菜单栏添加到窗口框架? [QT with C ++]

时间:2013-10-02 16:17:10

标签: c++ qt menu components add

我是C ++的初学者,我开始学习如何通过MVS IDE中的代码使用QT组件。我仍然不知道这是否是开始的最佳选择,但由于我是一名java程序员,我创建了使用Java(Swing组件)制作的路径。所以,我的问题是,如何通信我的两个代码,因为在一个我制作了窗口框架而另一个我制作了我的菜单栏?

在java中我会做类似的事情:

JFrame frame = new JFrame();
JMenu menu = new JMenu();

frame.add(menu);

无论如何,这是我的代码:

#include "Header.h"

class MainWindow{

    private:

        QWidget *widget;

    public:

        void buildWindow(QApplication& app){

            widget = app.desktop();
            QMainWindow *main_window = new QMainWindow();
            QWidget *mainWid = new QWidget(main_window);
            MyMenuBar myMenuBar(mainWid);
            main_window->setWindowState(mainWid->windowState() | Qt::WindowMaximized);
            main_window->setWindowTitle("QT Trainning");
            main_window->show();            
        }

};

class MyMenuBar:QMainWindow {

    public:

    MyMenuBar(QWidget* mainWid){

         QAction *quit = new QAction("&Quit", this);

         QMenuBar *menu = new QMenuBar(mainWid);
         QMenu *file;

         menu->addMenu(file);
          file = menuBar()->addMenu("&File");
            file->addAction(quit);

          connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
    }

};

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);

   MainWindow frame;

   frame.buildWindow(app);

   return app.exec();
}

我试图在Window类中创建一个MenuBar实例,但是没有那么有用,说实话,我发现处理QT界面的大多数材料他们都认为你使用的是QT GUI ...任何提示关于如何解决问题或者我应该怎样做才能练习C ++ ??

提前致谢

2 个答案:

答案 0 :(得分:3)

您应该为继承指定访问说明符,否则默认模式为public。

另外,如果你要在同一个文件中拥有所有类,那么排序很重要(我认为)。在你的情况下,MyMenuBar应该在MainWindow之前。因此,更好的做法是在不同的标题中包含不同的组件,然后根据需要包含它们。

以下是分别需要两个类的代码:

class TrainingMenu:public QMainWindow {

public:

        TrainingMenu(QMenuBar *menubar){
            QAction *quit = new QAction("&Quit", menubar);

            QMenu *file;

            file = menubar->addMenu("&File");
            file->addAction(quit);

            connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
        }

};

class MainWindows:public QMainWindow{

private:
    TrainingMenu* _menu;
public:
    MainWindows(QMainWindow *parent = 0):QMainWindow(parent) {
        _menu=new TrainingMenu(MainWindows::menuBar()); 
        this->setWindowTitle("Qt training");
        this->setWindowState(Qt::WindowMaximized);
        this->show();
    }

};



int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   MainWindows window;

   return app.exec();
}

答案 1 :(得分:2)

This示例应该足够好了。您执行以下操作:

  • 使用顶部窗口小部件作为父级
  • 创建QMenu
  • 将子菜单QMenu实例添加到根级菜单