Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: DmP от Марта 23, 2006, 10:39 Привет!
Скажем есть прога, с MDI интерфейсом, внутри которой могут открываться документы разных типов. Нужно, что бы в основное меню вставлялось дополнительное меню, в зависимости от типа документа. И при переходе от окна к окну менялось динамически. Подскажите пожалуйста, как это можно сделать, а лучше, где это можно посмотреть? Заранее спасибо. Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: Asaphus_Expansus от Марта 23, 2006, 14:28 Проще всего сделать меню со всеми возможными вариантами и по необходимости для части элементов делать show()/hide()
Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: DmP от Марта 24, 2006, 10:59 Цитата: "Asaphus_Expansus" Проще всего сделать меню со всеми возможными вариантами и по необходимости для части элементов делать show()/hide() Не самое лучшее решение, наверное. =) Но вот, что я не понимаю тогда, если открыто два окна, одного типа и у них одно окно действий, как тогда сделать, что бы сигнал от нажатия в меню доходил только в активное меню? Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: BaltikS от Марта 24, 2006, 11:11 Испускать сигнал и в главной форме этот сигнал ловить
Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: DmP от Марта 24, 2006, 11:36 Цитата: "BaltikS" Испускать сигнал и в главной форме этот сигнал ловить Сорри, ошибся немного, так правильно: "Но вот, что я не понимаю тогда, если открыто два окна одного типа и у них одно МЕНЮ действий, как тогда сделать, что бы сигнал от нажатия в меню доходил только в активное ОКНО?" :oops: Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: Kostya от Марта 24, 2006, 13:25 Цитата: "DmP" Цитата: "BaltikS" Испускать сигнал и в главной форме этот сигнал ловить Сорри, ошибся немного, так правильно: "Но вот, что я не понимаю тогда, если открыто два окна одного типа и у них одно МЕНЮ действий, как тогда сделать, что бы сигнал от нажатия в меню доходил только в активное ОКНО?" :oops: Аттачить слоты к сигналам в момент переключения окон. Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: Asaphus_Expansus от Марта 24, 2006, 13:49 Цитата: "DmP" "Но вот, что я не понимаю тогда, если открыто два окна одного типа и у них одно МЕНЮ действий, как тогда сделать, что бы сигнал от нажатия в меню доходил только в активное ОКНО?" :oops: Да пусть себе доходит во все (делать лишний раз connect/disconnect - дороже). Просто в слоте проверяй isActiveWindow и отрабатывай только в активном. Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: DmP от Марта 24, 2006, 17:30 Всем спасибо, за идеи. :)
Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: ElderOrb от Марта 24, 2006, 21:00 Самое красивое решение воспользоваться подходом котороый освещён на сайте троллтехов в Qt Quarterly в статье называющейся как-то вроде "Signal multiplexing.. "
Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: Steven_Orko от Марта 24, 2006, 22:32 Цитата: "ElderOrb" Самое красивое решение воспользоваться подходом котороый освещён на сайте троллтехов в Qt Quarterly в статье называющейся как-то вроде "Signal multiplexing.. " Ха, :D , опередил меня)))) тоже хотел про это написал ))) Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: DmP от Марта 27, 2006, 09:51 Цитата: "ElderOrb" Самое красивое решение воспользоваться подходом котороый освещён на сайте троллтехов в Qt Quarterly в статье называющейся как-то вроде "Signal multiplexing.. " http://doc.trolltech.com/qq/qq08-action-multiplexer.html Это конечно, хорошо, спасибо. Но основная тема как сделать динамическое меню? =) Суть в том что в программе, должно для каждого вида окна (а их будет очень много), чтобы меню "действия" постояно подстраивалось под окно, к тому же иногда менюх "действий" будет несколько. Идея набивать все эти менюхи скажем в ресурсах, и использовать show()/hide() не подходит. И "examples\mainwindows\mdi" - тоже не помогает решенюю вопроса. Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: Asaphus_Expansus от Марта 27, 2006, 10:00 > Суть в том что в программе, должно для каждого вида окна (а их будет очень
> много), чтобы меню "действия" постояно подстраивалось под окно, к тому же > иногда менюх "действий" будет несколько. Я, извините, немного не по существу - может быть что-то в консерватории поменять? Если у вас больше 3-4 видов окон и в каждом будет свое меню, с наполнением зависящим от содержимого окна, то как несчастный пользователь будет запоминать, где у него что находится? Я помню в своей практике некоторый продуктец, по отпуску нефтепродуктов со склада, реализованый подобным образом - ох, как же его проклинали люди, вынужденные с ним работать. Вопрос риторический, само собой. Название: Re: Qt4. Изменяющиеся меню. Помогите. Отправлено: Konstantin от Марта 29, 2006, 20:42 Ловить сигнал aboutToShow() от твоего меню и рисовать в меню в твоем слоте , по усмотрению.
Название: Re: Qt4. Изменяющиеся меню. Помогите. Отправлено: DmP от Марта 30, 2006, 08:46 Цитата: "Konstantin" Ловить сигнал aboutToShow() от твоего меню и рисовать в меню в твоем слоте , по усмотрению. Но сигнал же исходит от QMenu. А я думал сделать типа такого: 1) При открытии окна, она создает у себя одно или два QMenu и постоянно их хранит. 2) Вызывает некий метод ClearMainMenuBar, который с помощью QMenuBar::removeAction, убирает из меню ранее добавленные аналогичные меню. 3) С помощью QMenuBar::addMenu добавляет свои меню. При смене активного меню, выполняются 2 и 3 пункты. При закрытии окна 2 пункт. Но я ни когда не делал таких фокусов, и не знаю в том ли направлении идти, или есть способ лучше. Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: Dendy от Марта 30, 2006, 11:25 2 DmP
Ето абсолютно нормальньІй способ для динамического меню. Тролли в своих примерах делали так же само. Екземпляр QMenu создаётся один раз и при получении aboutToShow() от него меню очищается и заполняется QAction'ами, которьІе, с свою очередь, бьІли уже созданьІ ранее. Название: Qt4. Изменяющиеся меню. Помогите. Отправлено: DmP от Марта 30, 2006, 14:37 Ок. Буду пробовать, всем спасибо.
Кстати, вот нашел в документациии QSignalMapper, может пригодиться. |