У меня есть приложение MDI, mainWindow с QMDIArea. Форма содержит обычные меню (Система, Параметры, Окно, Справка). Я открываю childWindow (также класс MainWindow) как подокно с меню (например, formInvoice имеет меню Invoice и действия new, edit, save ...). Мне нужно связать меню childForm с меню mainForm MDI, ie Система, Счет, Параметры ... Либо автоматически (я не знаю, как), либо когда активирована одна из дочерних форм, загрузите список действий и вставьте их вручную в родительское меню главного окна MDI. Как это сделать?
Вот как это ведет себя (Qt 5.14):
Меню MDI
![](https://i.stack.imgur.com/GRKMN.png)
MDI -> открытая childForm
![](https://i.stack.imgur.com/hfuxe.jpg)
Мне нужно это:
MDI -> открытый childForm
![](https://i.stack.imgur.com/8nh6i.jpg)
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMdiSubWindow>
#include <QDebug>alt tex
#include "companies.h"
#include "invoices.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_actionCompaniesTriggered();
void on_actionInvoicesTriggered();
void on_mdiArea_subWindowActivated(QMdiSubWindow *arg1);
void on_actionClose_triggered();
private:
Ui::MainWindow *ui;
void loadSubWindow(QMainWindow *mainSubWindow);
};
#endif // MAINWINDOW_H
#ifndef INVOICES_H
#define INVOICES_H
#include <QMainWindow>
#include <QAction>
#include <QMenu>
#include <QDebug>
namespace Ui {
class Invoices;
}
class Invoices : public QMainWindow
{
Q_OBJECT
public:
explicit Invoices(QWidget *parent = nullptr);
~Invoices();
private slots:
void on_actionNewTriggered();
void on_actionEditTriggered();
void on_actionSaveTriggered();
void on_actionDeleteTriggered();
void on_actionCloseTriggered();
private:
Ui::Invoices *ui;
QAction *action_new;
QAction *action_edit;
QAction *action_save;
QAction *action_delete;
QAction *action_close;
QMenu *menuInvoices;
void createActions();
};
#endif // INVOICES_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->actionCompanies, SIGNAL(triggered()), this, SLOT(on_actionCompaniesTriggered()));
connect(ui->actionInvoices, SIGNAL(triggered()), this, SLOT(on_actionInvoicesTriggered()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionCompaniesTriggered(){
loadSubWindow(new Companies(this));
}
void MainWindow::on_actionInvoicesTriggered(){
loadSubWindow(new Invoices(this));
}
void MainWindow::loadSubWindow(QMainWindow *mainSubWindow){
auto subWindow = ui->mdiArea->addSubWindow(mainSubWindow);
subWindow->setAttribute(Qt::WA_DeleteOnClose);
subWindow->setWindowTitle(mainSubWindow->windowTitle());
subWindow->setWindowIcon(mainSubWindow->windowIcon());
subWindow->setWindowState(Qt::WindowMaximized);
subWindow->show();
}
void MainWindow::on_mdiArea_subWindowActivated(QMdiSubWindow *arg1)
{
qDebug() << arg1->windowTitle();
}
void MainWindow::on_actionClose_triggered()
{
close();
}
#include "invoices.h"
#include "ui_invoices.h"
Invoices::Invoices(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Invoices)
{
ui->setupUi(this);
createActions();
}
Invoices::~Invoices()
{
delete ui;
}
void Invoices::on_actionNewTriggered(){
qDebug() << "actNew";
}
void Invoices::on_actionEditTriggered(){
qDebug() << "actEdit";
}
void Invoices::on_actionSaveTriggered(){
qDebug() << "actSave";
}
void Invoices::on_actionDeleteTriggered(){
qDebug() << "actDelete";
}
void Invoices::on_actionCloseTriggered(){
this->close();
}
void Invoices::createActions(){
action_new = new QAction("&New", this);
action_edit = new QAction("&Edit", this);
action_save = new QAction("&Save", this);
action_delete = new QAction("&Delete", this);
action_close = new QAction("&Close", this);
connect(action_close, SIGNAL(triggered()), this, SLOT(on_actionCloseTriggered()));
connect(action_new, SIGNAL(triggered()), this, SLOT(on_actionNewTriggered()));
connect(action_edit, SIGNAL(triggered()), this, SLOT(on_actionEditTriggered()));
connect(action_save, SIGNAL(triggered()), this, SLOT(on_actionSaveTriggered()));
connect(action_delete, SIGNAL(triggered()), this, SLOT(on_actionDeleteTriggered()));
menuInvoices = new QMenu("Invoices", this);
menuInvoices->addAction(action_new);
menuInvoices->addAction(action_edit);
menuInvoices->addAction(action_save);
menuInvoices->addAction(action_delete);
menuInvoices->addAction(action_close);
ui->menubar->addMenu(menuInvoices);
}
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QMdiArea" name="mdiArea"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>22</height>
</rect>
</property>
<widget class="QMenu" name="menuSystem">
<property name="title">
<string>System</string>
</property>
<addaction name="actionCompanies"/>
<addaction name="actionInvoices"/>
<addaction name="actionClose"/>
<addaction name="actionAddMenu"/>
</widget>
<widget class="QMenu" name="menuOptions">
<property name="title">
<string>Options</string>
</property>
</widget>
<widget class="QMenu" name="menuWindow">
<property name="title">
<string>Window</string>
</property>
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>Help</string>
</property>
</widget>
<widget class="QMenu" name="menuInvoices">
<property name="title">
<string>Invoices</string>
</property>
</widget>
<addaction name="menuSystem"/>
<addaction name="menuInvoices"/>
<addaction name="menuOptions"/>
<addaction name="menuWindow"/>
<addaction name="menuHelp"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<action name="actionCompanies">
<property name="text">
<string>Companies</string>
</property>
</action>
<action name="actionClose">
<property name="text">
<string>Close</string>
</property>
</action>
<action name="actionInvoices">
<property name="text">
<string>Invoices</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Invoices</class>
<widget class="QMainWindow" name="Invoices">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Invoices</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>