如何添加一个菜单栏到窗口框架? [QT与C ++](How to add a Menu Bar

2019-10-18 17:38发布

我在C ++初学者,我开始学习如何通过代码在MVS IDE使用QT组件。 我仍然不知道这是否是开始的最好的选择,但由于我是一个Java程序员,我做我的Java(Swing组件)作出的路径。 所以,我的问题是,如何comunicate两级我的代码,因为在一个我做的窗框和其他我做我的菜单栏?

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

我tryed创建窗口类菜单栏里面的一个实例,但wans't如此乐于助人,老实说大部分材料的,我发现对付他们supose您正在使用QT GUI界面QT ...如何任何提示解决这个问题,或者我应该真正做到练C ++什么??

提前致谢

Answer 1:

你应该指定访问符继承,否则默认模式是公开的。

另外,如果你要在同一文件中的所有类的顺序很重要(我认为)。 你的情况应该MyMenuBar来到主窗口前。 所以,这是一个更好的做法是在不同的页眉不同的组件,然后根据需要进行包括。

下面是你需要分开两班的情况下,代码:

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


Answer 2:

这个例子应该是足够好的。 你做到以下几点:

  • 创建QMenu与顶级部件作为父
  • 添加子菜单QMenu实例根级菜单


文章来源: How to add a Menu Bar into a Window Frame? [QT with C++]