crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Несколько вопросов по MDI, QT-шный пример MDI
JohnZ
  опции профиля:
сообщение 13.11.2014, 17:32
Сообщение #1


Участник
**

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

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




Репутация:   0  


Всем Здравия !

Есть небольшой проект, начат из QT-шного примера MDI. Вопросы ...
1. В MDI дочерние окна обычно являются наследниками визуальных классов, которые в свою
очередь наследуются от QWidget. Можно-ли дочернее окно сделать наследником от невизуального
класса, например QObject ? ... и что и как в таком случае будет выбираться/активироваться
при выборе в меню window, если такое возможно ? (см. ниже, п.3)

2. Дочерние окна создаются из разных конфигураций, (например "Банк", "Касса", и т д) соотв-но
и меню/тулбар у каждого свои, которые создаются из загружаемого конфига. Как правильно
сделать "перегузку" меню/тулбара ? Есть-ли пример (или хотя-бы алгоритм) такой подмены ?

3. При выборе/загрузке конфигурации необходимо выставить только меню и тулбар у QMainWindow, без MdiChild-а.
Допустим, загружены 2 конфигурации, "Банк" и "Касса". В 1-ой открыт список клиентов и какой-либо отчёт,
а во 2-ой, - список документов. При выборе в меню window->Касса, все окна, принадлежащие 1-му конфигу
должны быть спрятаны/свёрнуты, и показаны/активированы окна, принадлежащие 2-му конфигу.
В случае, если MdiChild оконный объект, всё как в примере MDI, т.е. просто активируется выбранное окно.
Как сделать такую активацию в данном случае, с учётом если п.1 будет возможен ? Предположительно, все
открываемые из меню окна, кроме отчётов, будут наследниками от QDialog ...

Заранее благодарен за помощь.

PS: Если что непонятно из вопросов, спрашивайте - дополню.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 14.11.2014, 23:24
Сообщение #2


Старейший участник
****

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

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




Репутация:   8  


1. В MDI окна это специальные QMdiSubWindow, которые созданы для работы с этим контейнером. Обычные виджеты при добавлении оборачиваются в них.
Наследника от обычного класса можно сделать, но тогда придется исвою обработку писать в QMdiArea. Но зачем?

2. Опять же зачем подменять? Можно напрямую добавлять Actions из кода.

3. Тут я не совсем понял. Я думаю активировать/показывать окна принадлежащие данной конфигурации, прятать/сворачивать остальные.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 18.11.2014, 18:58
Сообщение #3


Участник
**

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

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




Репутация:   0  


lanz, спасибо за ответ !
Цитата(lanz @ 15.11.2014, 0:24) *
1. В MDI окна это специальные QMdiSubWindow, которые созданы для работы с этим контейнером. Обычные виджеты при добавлении оборачиваются в них.
Наследника от обычного класса можно сделать, но тогда придется исвою обработку писать в QMdiArea. Но зачем?

Всё правильно, незачем. Тогда задам вопрос по другому - как сделать MdiCild-а прозрачным ? Есть такая возможность ? Если да, то п.3 отпадает автоматически :-)

Цитата(lanz @ 15.11.2014, 0:24) *
2. Опять же зачем подменять? Можно напрямую добавлять Actions из кода.

Так оно и будет, но проблема, как я уже говорил, в перерисовке при активации при нескольких MdiCild-ах.
Т.е. при выборе MdiCild-а, меню QMainWindow должно быть заменено на меню проекта, находящегося в
MdiCild-е. Указатель на меню главного окна находится внутри QMainWindow, и для такой прямой подмены
не доступен, IMHO. Или всё-таки можно ?

В прицепе для наглядности мин. проект с демо-конфигом. Фактически в проекте он является MdiCild-ом.
Менюшка в ветке interfase->mainmenu. Тулбар рядом.

Прикрепленные файлы
Прикрепленный файл  simpledommodel.zip ( 67.92 килобайт ) Кол-во скачиваний: 132
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 20.11.2014, 22:45
Сообщение #4


Старейший участник
****

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

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




Репутация:   8  


Цитата(JohnZ @ 18.11.2014, 18:58) *
Тогда задам вопрос по другому - как сделать MdiCild-а прозрачным ? Есть такая возможность ? Если да, то п.3 отпадает автоматически :-)

Передать в addSubWindow Qt::FramelessWindowHint во второй параметр, а в первый свой виджет, который сделать прозрачным.
Цитата(JohnZ @ 18.11.2014, 18:58) *
Указатель на меню главного окна находится внутри QMainWindow, и для такой прямой подмены
не доступен, IMHO. Или всё-таки можно ?

Можно передать в widget который завернут в subwindow указатель на нужное меню, потом делать с ним все что угодно .)
Можно сделать слт в главном окне который будет этим заниматся и прикрутить к нему сигналы из виджета subwindow.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 26.11.2014, 12:27
Сообщение #5


Участник
**

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

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




Репутация:   0  


'lanz' Спасибо за ответ. Попробую реализовать и отпишусь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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