1

我是 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...关于如何使用 QT GUI 的任何提示解决问题或者我应该怎么做才能练习 C++?

提前致谢

4

2 回答 2

3

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

此外,如果您要将所有类都放在同一个文件中,那么排序很重要(我认为)。在您的情况下,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();
}
于 2013-10-03T13:09:48.540 回答
2

This example should be good enough. You do the following:

  • Create a QMenu with the top widget as a parent
  • Add submenu QMenu instances to the root level menu
于 2013-10-02T18:18:33.127 回答