gpt4 book ai didi

c++ - Qt 中的全局菜单与 QtMenuBar

转载 作者:行者123 更新时间:2023-11-28 03:42:27 27 4
gpt4 key购买 nike

我是 C++ 和 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 实例化菜单类:

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

菜单.h

#ifndef MENU_H
#define MENU_H

#include <QMenuBar>

class Menu : public QMenuBar
{
Q_OBJECT

public:
Menu(QMenuBar *parent = 0);
};

#endif // MENU_H

菜单.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);
}

我做错了什么?

最佳答案

您的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);
}

关于c++ - Qt 中的全局菜单与 QtMenuBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8671290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com