crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> MDI/QWorkspace+разные типы документов., Как правильно спроектировать?
trdm
  опции профиля:
сообщение 10.2.2008, 23:53
Сообщение #1


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Планирую сделать множество разных "документов" в смысле управляемых QWorkspace дочерних окон,
в которых будет разнородное содержимое: текст, формы разных типов, таблицы.
Каждый из типов документов имеет свои уникальные действия.
У некоторых документов есть даже свои менюшки 1-го уровня и панели инструментов. В смысле не одна а несколько.
как мне правильно архитектурно скомпоновать их в интерфейс?
есть ли примеры, которые можно посмотреть?
зарезервировать в главном меню максимальное количество возможных меню и при смене активного чилда перестраивать менюшку?
Как быть со стандартными акциями типа "ЗАписать", "Вырезать", "вставить", "Поиск" и т.п.
Сделать абстрактный класс МидиЧилд, добавить в него политики, типа
// политика доступности определенных действий для документов
// т.е. действие доступно: Всегда, Никогда, Запрос на доступность.
typedef enum _docActionPolicy {
actPolisyAlways
, actPolisyNever
, actPolisyAsk
} docActionPolicy;
в базовом заглушить их, а в наследнике разрешать только доступные/реализованные?
Вобщем кучка вопросов, на которых непонятно как правильно ответить (
Поможете?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 11.2.2008, 0:17
Сообщение #2


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Или ввести в базовый виртуальную функцию типа: bool MdiChild::docPolicyHelper(docPolicyEnumerator searchPolicy),
Которая сама должна ответить на вопрос о стандартных акциях, доступно ли?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 11.2.2008, 1:11
Сообщение #3


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(trdm @ 11.2.2008, 0:17) *
Или ввести в базовый виртуальную функцию типа: bool MdiChild::docPolicyHelper(docPolicyEnumerator searchPolicy),
Которая сама должна ответить на вопрос о стандартных акциях, доступно ли?

так с политиками управления "стандартными акциями" для разных документов разобрался через "docPolicyHelper".
Удобно получилось и интерфейс живой и настраивается легко и прехватить есть где.
А вот как быть с дополнительными панелями инструментов и менюшками, зависимыми от типов документов пока не вкурю как сделать (((
ПС. вообще нравится мне QT, очень легко программируется, и свободно как-то не то что в MFC.

Сообщение отредактировал trdm - 11.2.2008, 1:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.2.2008, 8:07
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


У тебя нет книжки "Патерны объектно-ориентированного проектирования" Э.Гамма и др.?
Там рассматривается пример создания тектового редактора Lexi, может быть это то что тебе нужно, я чесно говоря мельком посмотрел.

Сообщение отредактировал Litkevich Yuriy - 11.2.2008, 8:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 11.2.2008, 10:53
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(trdm @ 11.2.2008, 1:11) *
А вот как быть с дополнительными панелями инструментов и менюшками, зависимыми от типов документов пока не вкурю как сделать (((
Создаешь класс, общий для всех меню, от него делаешь производными дополнительные классы, а потом на лету меняешь менюшки. Тоже самое для панелей инструментов.

Главное создавать меню и панели инструментов не в QDesigner, а динамически, во время выполнения, примерно так: Создание пунктов меню, на лету.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 11.2.2008, 12:52
Сообщение #6


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(ViGOur @ 11.2.2008, 10:53) *
Создаешь класс, общий для всех меню, от него делаешь производными дополнительные классы, а потом на лету меняешь менюшки. Тоже самое для панелей инструментов.

Главное создавать меню и панели инструментов не в QDesigner, а динамически, во время выполнения, примерно так: Создание пунктов меню, на лету.

Не совсем то, что надо. Опишу поподробнее.
Есть главное окно, экземпляр QMainWindow, "внутри" QWorkspace.
У производный от QMainWindow есть свое главное меню: 1-й уровень: Файл, ...., Сервис, Окна, Справка.
Так вот нужно при активации определенного вида документа добавлять в гл. меню QMainWindow специальные менюшки "вида активного документа" в место "...,". То же самое и с панелями. Как это правильно архитектурно сделать?
Создавать панели и меню на лету, тут проблем нет.

Сообщение отредактировал trdm - 11.2.2008, 12:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 11.2.2008, 13:49
Сообщение #7


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Как вариант можно заморочиться с setMenuBar , а именно устанавливать свое меню при активизации документа и возвращать назад при уничтожении...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 11.2.2008, 14:12
Сообщение #8


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(ViGOur @ 11.2.2008, 13:49) *
Как вариант можно заморочиться с setMenuBar , а именно устанавливать свое меню при активизации документа и возвращать назад при уничтожении...

В смысле? А как с фиксированными менюшками, которые доступны при любом активном документе или без них?
Мне их в каждый документ лепить? :(
Короче не выход.
Да тут еще один момент, нет смысла создавать в каждом экземпляре документа меню, зато есть смысл хранить аскции и меню в самом экземпляре QMainWindow.

Сообщение отредактировал trdm - 11.2.2008, 14:18
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 11.2.2008, 14:18
Сообщение #9


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Угу, но из одной общей для всех функции члена.

Или как еще один вариант, можно сделать два слота, в которых при активизации документа добавляется твое меню, а при уничтожении удаляется. Соответственно правильно выбрав для этого сигналы и в качестве переменных передающих нужные тебе меню...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 11.2.2008, 14:43
Сообщение #10


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(ViGOur @ 11.2.2008, 14:18) *
Угу, но из одной общей для всех функции члена.

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

не, бяка неуправляемая получается. Мне тут опыт раскопок в сцинтиле кое что пришептал.
Возможно лучше сделать так: Создать статический класс менеджер документов, при добавлении класса документа в программу в конце реализации каждого класса документа раелизовать функцию отдающую в менеджеру след. информацию:
- Количество доп. менюшек, затребованных классом
- количество панелей, затребованных классом.
- количество акций, затребованных классом.
- расширения файлов обрабатываемых классом
и т.п.
при создании главного окна уже будет информация, нужная для формирования главного меню и панелей инструментов.
хотя картинка в целом не ясна еще, но думаю это правильный путь, который обеспечит мне гибкость.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 18:38