Название: Портирование меню Отправлено: Igors от Май 08, 2014, 13:25 Добрый день
Нативное приложение работает с главным меню примерно так Код Напр случилось что-то в приложении (напр открылось новое окно), вызывается AdjustMenu которое вызовет для каждого айтема CallbackProc, а она решит делать ли этот айтем enabled/checked, как может изменить имя и.т.п. и вызовет нативную ф-цию для обновления UI. Как срастить это все с Qt? Стоит ли выбросить старые структуры? Если нет то как увязать их с QAction? Спасибо Название: Re: Портирование меню Отправлено: kambala от Май 08, 2014, 14:30 QAction * QMenu::menuAction() const
QMenu * QAction::menu() const QList<QAction *> QWidget::actions() const этого должно хватить чтобы встроиться в текущую иерархию Название: Re: Портирование меню Отправлено: Igors от Май 08, 2014, 16:29 этого должно хватить чтобы встроиться в текущую иерархию Т.е. Вы предлагаете текущие структуры данных сохранить. Тогда как встраиваться. Напр чтобы изменить имя/атрибуты QAction нужно видеть MenuItem и.т.п. Кто кого и как наследует (или является членом) - вот это я хочу пообсуждатьНазвание: Re: Портирование меню Отправлено: kambala от Май 08, 2014, 18:18 экшен-родитель данного экшена: action->menu()->menuAction() (проверки на 0 опущены)
содержится ли данный экшен в данном меню: menu->actions().contains(action) следующий/предыдущий опрашиваются из action->menu()->actions() (или заполняются при создании, не знаю как в коде организовано) я правильно понял вопрос? Название: Re: Портирование меню Отправлено: Igors от Май 09, 2014, 09:32 следующий/предыдущий опрашиваются из action->menu()->actions() (или заполняются при создании, не знаю как в коде организовано) Не совсем. Никаких QAction у меня пока нет - мне еще надо их построить. Как при этом мне задействовать существующую структуру дерева? Напр если QAction выдаст сигнал - надо как-то вызвать callback из MenuItem, а где его взять?я правильно понял вопрос? Тут еще одна интересная вещь всплыла. Оказывается приложение не обновляет меню немедленно. Делается так: - если мышь нажата в меню баре (или нажата клавиша hotkey menu) - тогда вызывается AdjustMenu которая пробежится по всем айтемам и установит их состояние. Пока не знаю плохо это или хорошо :) Название: Re: Портирование меню Отправлено: kambala от Май 09, 2014, 13:07 я думал просто превратить MenuItem в следующую структуру:
Код
по идее меню айтему не нужно знать свой коллбэк — этим занимается «контроллер» (тот кто коллбэк и присваивает, или вызывает connect). как кстати сейчас объявлен CallbackProc ? как указатель на функцию? Название: Re: Портирование меню Отправлено: Igors от Май 12, 2014, 11:42 по идее меню айтему не нужно знать свой коллбэк — этим занимается «контроллер» (тот кто коллбэк и присваивает, или вызывает connect). как кстати сейчас объявлен CallbackProc ? как указатель на функцию? Да. Точнее там даже 2 callback'а (один - само действие, второй - установка атрибутов)я думал просто превратить MenuItem в следующую структуру: Ну а что я этим достигаю? Допустим пришел сигнал от QAction, где взять MenuItem чтобы позвать его callback?Код
Название: Re: Портирование меню Отправлено: GreatSnake от Май 12, 2014, 11:59 Отнаследовать MenuItem от QAction
либо QAction::setData( QVariant::fromValue<MenuItem* > ) Название: Re: Портирование меню Отправлено: Igors от Май 12, 2014, 13:06 Отнаследовать MenuItem от QAction Тут такая "мелкая пакость" - MenuIten существует и для суб-менюшек, тогда menu->menuAction() не даст мне наследника либо QAction::setData( QVariant::fromValue<MenuItem* > ) Название: Re: Портирование меню Отправлено: GreatSnake от Май 12, 2014, 13:12 Тут такая "мелкая пакость" - MenuIten существует и для суб-менюшек, тогда menu->menuAction() не даст мне наследника Хм.., чего-то не догоняю - ведь какой создашь QAction, тот и получишь. |