Russian Qt Forum
Ноябрь 24, 2024, 22:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: (РЕШЕНО) подменю не создается как подменю  (Прочитано 2270 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Октябрь 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 );
        }
    }
}

и получаю вот такой бред
« Последнее редактирование: Октябрь 24, 2014, 16:34 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #1 : Октябрь 24, 2014, 15:31 »

Что я сделал не так? Почему пункты подуровня оказались в верхнем уровне, хотя они рекурсивно должны у подуровня создаваться?
Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #2 : Октябрь 24, 2014, 16:30 »

Что я сделал не так? Почему пункты подуровня оказались в верхнем уровне, хотя они рекурсивно должны у подуровня создаваться?
А что это за contextMeny?
contextMenu->addAction( action );
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #3 : Октябрь 24, 2014, 16:32 »

@#@W#$%.... всё, пора идти водку пить...
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.192 секунд. Запросов: 23.