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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt4. Изменяющиеся меню. Помогите.  (Прочитано 10321 раз)
DmP
Гость
« : Март 23, 2006, 10:39 »

Привет!

Скажем есть прога, с MDI интерфейсом, внутри которой могут открываться документы разных типов. Нужно, что бы в основное меню вставлялось дополнительное меню, в зависимости от типа документа.
И при переходе от окна к окну менялось динамически.

Подскажите пожалуйста, как это можно сделать, а лучше, где это можно посмотреть?

Заранее спасибо.
Записан
Asaphus_Expansus
Гость
« Ответ #1 : Март 23, 2006, 14:28 »

Проще всего сделать меню со всеми возможными вариантами и по необходимости для части элементов делать show()/hide()
Записан
DmP
Гость
« Ответ #2 : Март 24, 2006, 10:59 »

Цитата: "Asaphus_Expansus"
Проще всего сделать меню со всеми возможными вариантами и по необходимости для части элементов делать show()/hide()


Не самое лучшее решение, наверное. =)

Но вот, что я не понимаю тогда, если открыто два окна, одного типа и у них одно окно действий, как тогда сделать, что бы сигнал от нажатия в меню доходил только в активное меню?
Записан
BaltikS
Гость
« Ответ #3 : Март 24, 2006, 11:11 »

Испускать сигнал и в главной форме этот сигнал ловить
Записан
DmP
Гость
« Ответ #4 : Март 24, 2006, 11:36 »

Цитата: "BaltikS"
Испускать сигнал и в главной форме этот сигнал ловить


Сорри, ошибся немного, так правильно:
"Но вот, что я не понимаю тогда, если открыто два окна одного типа и у них одно МЕНЮ действий, как тогда сделать, что бы сигнал от нажатия в меню доходил только в активное ОКНО?"
 :oops:
Записан
Kostya
Гость
« Ответ #5 : Март 24, 2006, 13:25 »

Цитата: "DmP"
Цитата: "BaltikS"
Испускать сигнал и в главной форме этот сигнал ловить


Сорри, ошибся немного, так правильно:
"Но вот, что я не понимаю тогда, если открыто два окна одного типа и у них одно МЕНЮ действий, как тогда сделать, что бы сигнал от нажатия в меню доходил только в активное ОКНО?"
 :oops:


Аттачить слоты к сигналам в момент переключения окон.
Записан
Asaphus_Expansus
Гость
« Ответ #6 : Март 24, 2006, 13:49 »

Цитата: "DmP"

"Но вот, что я не понимаю тогда, если открыто два окна одного типа и у них одно МЕНЮ действий, как тогда сделать, что бы сигнал от нажатия в меню доходил только в активное ОКНО?"
 :oops:


Да пусть себе доходит во все (делать лишний раз connect/disconnect - дороже). Просто в слоте проверяй isActiveWindow и отрабатывай только в активном.
Записан
DmP
Гость
« Ответ #7 : Март 24, 2006, 17:30 »

Всем спасибо, за идеи.  Улыбающийся
Записан
ElderOrb
Гость
« Ответ #8 : Март 24, 2006, 21:00 »

Самое красивое решение воспользоваться подходом котороый освещён на сайте троллтехов в Qt Quarterly в статье называющейся как-то вроде "Signal multiplexing.. "
Записан
Steven_Orko
Гость
« Ответ #9 : Март 24, 2006, 22:32 »

Цитата: "ElderOrb"
Самое красивое решение воспользоваться подходом котороый освещён на сайте троллтехов в Qt Quarterly в статье называющейся как-то вроде "Signal multiplexing.. "

Ха,  Веселый , опередил меня)))) тоже хотел про это написал )))
Записан
DmP
Гость
« Ответ #10 : Март 27, 2006, 09:51 »

Цитата: "ElderOrb"
Самое красивое решение воспользоваться подходом котороый освещён на сайте троллтехов в Qt Quarterly в статье называющейся как-то вроде "Signal multiplexing.. "


http://doc.trolltech.com/qq/qq08-action-multiplexer.html
Это конечно, хорошо, спасибо.
Но основная тема как сделать динамическое меню? =)

Суть в том что в программе, должно для каждого вида окна (а их будет очень много), чтобы меню "действия" постояно подстраивалось под окно, к тому же иногда менюх "действий" будет несколько.

Идея набивать все эти менюхи скажем в ресурсах, и использовать show()/hide() не подходит.
И "examples\mainwindows\mdi" - тоже не помогает решенюю вопроса.
Записан
Asaphus_Expansus
Гость
« Ответ #11 : Март 27, 2006, 10:00 »

> Суть в том что в программе, должно для каждого вида окна (а их будет очень
> много), чтобы меню "действия" постояно подстраивалось под окно, к тому же
> иногда менюх "действий" будет несколько.

Я, извините, немного не по существу - может быть что-то в консерватории поменять? Если у вас больше 3-4 видов окон и в каждом будет свое меню, с наполнением зависящим от содержимого окна, то как несчастный пользователь будет запоминать, где у него что находится? Я помню в своей практике некоторый продуктец, по отпуску нефтепродуктов со склада, реализованый подобным образом - ох, как же его проклинали люди, вынужденные с ним работать.  Вопрос риторический, само собой.
Записан
Konstantin
Гость
« Ответ #12 : Март 29, 2006, 20:42 »

Ловить сигнал aboutToShow() от твоего меню и рисовать в меню в твоем слоте , по усмотрению.
Записан
DmP
Гость
« Ответ #13 : Март 30, 2006, 08:46 »

Цитата: "Konstantin"
Ловить сигнал aboutToShow() от твоего меню и рисовать в меню в твоем слоте , по усмотрению.


Но сигнал же исходит от QMenu.
А я думал сделать типа такого:
1) При открытии окна, она создает у себя одно или два QMenu и постоянно их хранит.
2) Вызывает некий метод ClearMainMenuBar, который с помощью QMenuBar::removeAction, убирает из меню ранее добавленные аналогичные меню.
3) С помощью QMenuBar::addMenu добавляет свои меню.

При смене активного меню, выполняются 2 и 3 пункты.
При закрытии окна 2 пункт.

Но я ни когда не делал таких фокусов, и не знаю в том ли направлении идти, или есть способ лучше.
Записан
Dendy
Гость
« Ответ #14 : Март 30, 2006, 11:25 »

2 DmP

Ето абсолютно нормальньІй способ для динамического меню. Тролли в своих примерах делали так же само. Екземпляр QMenu создаётся один раз и при получении aboutToShow() от него меню очищается и заполняется QAction'ами, которьІе, с свою очередь, бьІли уже созданьІ ранее.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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