Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Октябрь 24, 2014, 15:27



Название: (РЕШЕНО) подменю не создается как подменю
Отправлено: Гурман от Октябрь 24, 2014, 15:27
Надо простое иерархическое меню со статической инициализацией, поэтому по простому сначала такая структура

Код:
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 );
        }
    }
}

и получаю вот такой бред


Название: Re: подменю не создается как подменю
Отправлено: Гурман от Октябрь 24, 2014, 15:31
Что я сделал не так? Почему пункты подуровня оказались в верхнем уровне, хотя они рекурсивно должны у подуровня создаваться?


Название: Re: подменю не создается как подменю
Отправлено: Old от Октябрь 24, 2014, 16:30
Что я сделал не так? Почему пункты подуровня оказались в верхнем уровне, хотя они рекурсивно должны у подуровня создаваться?
А что это за contextMeny?
contextMenu->addAction( action );


Название: Re: подменю не создается как подменю
Отправлено: Гурман от Октябрь 24, 2014, 16:32
@#@W#$%.... всё, пора идти водку пить...