在窗口构造函数之外动态地将QAction添加到QMenuBar中(可以从另一个文件访问Designer中生成的ui)
Add QAction to the QMenuBar dynamically outside of window constructor (get access to ui generated in Designer from another file)
如何在窗口构造函数之外的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);
}
如果你在menuBar
中使用QtDesigner创建了菜单" view ",那么你不需要这一行:
ui->menuBar->addAction(ui->menuView->menuAction());
这段代码为我工作:
void Menu::AddSubMenu()
{
QAction *actionFirst = new QAction(this);
actionFirst->setObjectName("actionFirst");
actionFirst->setText("Test");
ui->menuView->addAction(actionFirst);
}
帮助别人理解什么是ui。它是在menu.h中声明的Class:
#include "ui_menu.h"
class Menu: public QMainWindow
{
Q_OBJECT
public:
....
private:
Ui::MainWindow ui;
相关文章:
- 防止临时对象文件访问 MSVC 中的磁盘
- 内存映射文件访问非常慢
- 从多个文件访问静态全局 WinForm UI 对象
- 在单元测试项目中包括 .c 文件,并从多个 cpp 文件访问它而不会出现链接问题
- 如何在Android中从本机编译的c ++二进制文件访问相机
- 如何:监视Windows中另一个进程的文件访问?
- 如何从NTFS中的$ MFT文件访问文件的每个块的文件指针
- 执行C 代码时快速频繁的文件访问
- 使用TDD时隐藏文件访问实现详细信息
- 从C文件访问C 类成员功能
- 从另一个CPP文件访问Form1的文本框,Visual C 2010
- 在所有CPP文件中使用一个Globe变量.如果CPP文件的一个类更改该值,我想从另一个类CPP文件访问它
- 如何从C 文件访问$(target_arch)
- 系统访问出界异常,尝试从flatbuffer的二进制文件访问"LengthofTable"
- 如何声明可通过多个头文件访问的对象
- 使用二进制文件访问违规读取位置
- 哪种类型的文件访问使用
- 在其他源文件中没有通用的头文件访问功能
- 文件访问不起作用
- Windows 8 应用商店应用程序C++文件访问