0

如何在窗口构造函数之外向 QMenuBar 添加一些操作?

ui_menu.h在 QtDesigner 中使用 QMenuBar 创建了一些文件:

#ifndef UI_MENU_H
#define UI_MENU_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QAction *actionTtt;
    QWidget *centralwidget;
    QMenuBar *menubar;
    QMenu *menuViev;
    QStatusBar *statusbar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QStringLiteral("MainWindow"));
        MainWindow->resize(800, 600);
        actionTtt = new QAction(MainWindow);
        actionTtt->setObjectName(QStringLiteral("actionTtt"));
        centralwidget = new QWidget(MainWindow);
        centralwidget->setObjectName(QStringLiteral("centralwidget"));
        MainWindow->setCentralWidget(centralwidget);
        menubar = new QMenuBar(MainWindow);
        menubar->setObjectName(QStringLiteral("menubar"));
        menubar->setGeometry(QRect(0, 0, 800, 21));
        menuViev = new QMenu(menubar);
        menuViev->setObjectName(QStringLiteral("menuFile"));
        MainWindow->setMenuBar(menubar);
        statusbar = new QStatusBar(MainWindow);
        statusbar->setObjectName(QStringLiteral("statusbar"));
        MainWindow->setStatusBar(statusbar);

        menubar->addAction(menuFile->menuAction());
        menuViev->addAction(actionTtt);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi


};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MENU_H

并在menu.cpp该窗口的创建类中:

Menu::Menu(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
}

在这个类中,我需要一个将 QAction 添加到 QMenuBar 的函数

void Menu::AddSubMenu()
{
    actionFirst = new QAction(this);
    actionFirst->setObjectName("actionFirst");
    menuBar->addAction(menuViev->menuAction());
    menuViev->addAction(actionFirst);
}

但它显示了关于:访问冲突读取...

4

2 回答 2

0

如果您在 usnig QtDesigner 中创建了菜单“Viev”,menuBar则不需要此行:

ui->menuBar->addAction(ui->menuView->menuAction());

这段代码对我有用:

void Menu::AddSubMenu()
{
    QAction *actionFirst = new QAction(this);
    actionFirst->setObjectName("actionFirst");
    actionFirst->setText("Test");
    ui->menuView->addAction(actionFirst);
}
于 2015-09-13T07:04:12.083 回答
0

帮助其他人了解什么是 ui。它是在 menu.h 中声明的类:

#include "ui_menu.h"
class Menu: public QMainWindow
{
    Q_OBJECT

public:
....

private:
    Ui::MainWindow ui;
于 2015-09-13T15:41:07.627 回答