Указатель на функции слотов в addAction
В общем, делаю меню. у каждого пункта есть слот действие на событие выбора.
Наименование пункта меню и указатель на слот собран в векторе. ошибка возникает в addAction, когда я пытаюсь ассоциироваться с определённым слотом.
VectorDraw.hpp:
#pragma once
#include "VectorDraw_pch.hpp"
#include <QMenuBar>
class MainWindow : public QMainWindow {
Q_OBJECT
QMainWindow * m_main_window;
typedef void (MainWindow::*funcactionType)();
struct itemsMenuType {QString itemsText; funcactionType action ;};
public slots:
void actOpen() {qDebug()<<"Open";}
void actSave() {qDebug()<<"Save";}
void actSaveAs() {qDebug()<<"SaveAs";}
void actExit() {qDebug()<<"Exit";}
public:
QVector<itemsMenuType> items = {
{"Открыть", &MainWindow::actOpen},
{"Сохранить", &MainWindow::actSave},
{"Сохранить как",&MainWindow::actSaveAs},
{"Выход", &MainWindow::actExit}
};
MainWindow( QWidget * p_parent = nullptr, int argc=0, char * argv[] = nullptr )
: QMainWindow( p_parent ), m_main_window(this){
auto addRootItemMenu { [=](QString menuText, QMenuBar * MB, QVector<itemsMenuType> items ){
QMenu * menuL0 = new QMenu(menuText);
for (auto i : items){
menuL0->addAction(i.itemsText, this, (this->*(i.action))());
MB->addMenu(menuL0);
}
}
};
QMenuBar * mainMenu = new QMenuBar;
addRootItemMenu ("Файл", mainMenu, items);
m_main_window->setMenuBar(mainMenu);
}
}; // class MainWindow
VectorDraw.cpp:
#include "VectorDraw.hpp"
int main( int argc, char * argv[] ) {
QApplication app( argc, argv );
MainWindow w(nullptr, argc, argv);
w.show();
return app.exec();
}
то есть почему-то вот так работает:
menuL0->addAction(i.itemsText, this, &MainWindow::actOpen);
а когда я хочу выбрать из вектора, то это не работает:
menuL0->addAction(i.itemsText, this, (this->*(i.action))());