typedef struct MENUEXPORTED { const char* menuLineName; // надпись на строке меню const char* actionslot; // слот, вызываемый при выборе пункта, заполнять с помощью SLOT(имя) bool notactive; // если true, пункт не активен const MENUEXPORTED* sublevel; // если не 0, то указатель на подуровень} MENUEXPORTED;
static MENUEXPORTED renameSubMenu[] = { { "суб 1", SLOT(<...>) }, { "суб 2", SLOT(<...>) }, { "суб 3", SLOT(<...>) }, { "суб 4", SLOT(<...>) }, {0}};static MENUEXPORTED menuexported[] = { { "ур 1", SLOT(<...>) }, { "ур 2", SLOT(<...>), true }, { "ур 3", SLOT(<...>), true }, { "субменю", 0, false, renameSubMenu }, {0}};
void MainWindow::makeMenu( QMenu *menu, const MENUEXPORTED *level, QObject* receiver ){ for( int i = 0; level[ i ].menuLineName; i++ ) { if( level[ i ].sublevel ) { QMenu* subMenu = menu->addMenu( tr( level[ i ].menuLineName ) ); makeMenu( subMenu, level[ i ].sublevel, receiver ); } else { QAction* action = new QAction( tr( level[ i ].menuLineName ), menu ); action->setEnabled( ! level[ i ].notactive ); contextMenu->addAction( action ); connect( action, SIGNAL(triggered()), receiver, level[ i ].actionslot ); } }}