【问题标题】:How to add a Menu Bar into a Window Frame? [QT with C++]如何将菜单栏添加到窗口框架中? [QT 与 C++]
【发布时间】:2013-10-02 16:17:09
【问题描述】:

我是 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++??

提前致谢

【问题讨论】:

    标签: c++ qt menu components add


    【解决方案1】:

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

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

    【讨论】:

    • 首先抱歉回复晚了,希望有时间学习c++。无论如何,答案很棒,就像一个魅力。我现在意识到*parent 是 QT 应用程序的主指针,对于我想创建的每个组件,我需要在应用程序的主框架或小部件中定义它,从那里 instaciate 并传递给它的类来处理.非常感谢眉头。 ps:如果我理解错了请纠正我
    【解决方案2】:

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

    • 创建一个QMenu,将顶部小部件作为父小部件
    • 将子菜单QMenu 实例添加到根级菜单

    【讨论】:

    • 该代码有助于以一种简单的方式开发我想要的东西,但没有回答我想要的知识 =/ 我仍然无法使用两个不同的类来处理如何做到这一点。
    猜你喜欢
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多