как соединить слот открытия файла с menu "file"?

как соединить слот открытия файла с menu "file" ?

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

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 open();


private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H



#include "mainwindow.h"
#include <QMenuBar>
#include <QAction>
#include <QVBoxLayout>
#include <QApplication>
#include <QFileDialog>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow *w = new QMainWindow;

QWidget *cw = new QWidget(w);
QMenuBar *menu = new QMenuBar(cw);
QHBoxLayout *L = new QHBoxLayout(cw);
QMenu *file = new QMenu("&Файл");
file->addMenu("Создать");
file->addMenu("Открыть");
menu->addMenu(file);
w->setCentralWidget(cw);

w->show();





return a.exec();
}




#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QMenuBar>
#include <QAction>
#include <QVBoxLayout>
#include <QApplication>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}











connect(file,SIGNAL(triggered()), this, SLOT(open()));


MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::open()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "",
tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));


} 

Ответы (1 шт):

Автор решения: e.n.shirokov

Вам нужно добавить QAction вместо QMenu:

QAction * actOpen = file->addAction("Создать");

connect(actOpen, &QAction::triggered, this, &MainWindow::open);
→ Ссылка