Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Несколько вопросов по MDI
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
JohnZ
Всем Здравия !

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

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

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

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

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

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

3. Тут я не совсем понял. Я думаю активировать/показывать окна принадлежащие данной конфигурации, прятать/сворачивать остальные.
JohnZ
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. Тулбар рядом.
lanz
Цитата(JohnZ @ 18.11.2014, 18:58) *
Тогда задам вопрос по другому - как сделать MdiCild-а прозрачным ? Есть такая возможность ? Если да, то п.3 отпадает автоматически :-)

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

Можно передать в widget который завернут в subwindow указатель на нужное меню, потом делать с ним все что угодно .)
Можно сделать слт в главном окне который будет этим заниматся и прикрутить к нему сигналы из виджета subwindow.
JohnZ
'lanz' Спасибо за ответ. Попробую реализовать и отпишусь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.