Несколько вопросов по MDI, QT-шный пример MDI |
Здравствуйте, гость ( Вход | Регистрация )
Несколько вопросов по 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, спасибо за ответ !
1. В MDI окна это специальные QMdiSubWindow, которые созданы для работы с этим контейнером. Обычные виджеты при добавлении оборачиваются в них. Наследника от обычного класса можно сделать, но тогда придется исвою обработку писать в QMdiArea. Но зачем? Всё правильно, незачем. Тогда задам вопрос по другому - как сделать MdiCild-а прозрачным ? Есть такая возможность ? Если да, то п.3 отпадает автоматически :-) 2. Опять же зачем подменять? Можно напрямую добавлять Actions из кода. Так оно и будет, но проблема, как я уже говорил, в перерисовке при активации при нескольких MdiCild-ах. Т.е. при выборе MdiCild-а, меню QMainWindow должно быть заменено на меню проекта, находящегося в MdiCild-е. Указатель на меню главного окна находится внутри QMainWindow, и для такой прямой подмены не доступен, IMHO. Или всё-таки можно ? В прицепе для наглядности мин. проект с демо-конфигом. Фактически в проекте он является MdiCild-ом. Менюшка в ветке interfase->mainmenu. Тулбар рядом.
Прикрепленные файлы
|
|
|
lanz |
20.11.2014, 22:45
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Тогда задам вопрос по другому - как сделать MdiCild-а прозрачным ? Есть такая возможность ? Если да, то п.3 отпадает автоматически :-) Передать в addSubWindow Qt::FramelessWindowHint во второй параметр, а в первый свой виджет, который сделать прозрачным. Указатель на меню главного окна находится внутри QMainWindow, и для такой прямой подмены не доступен, IMHO. Или всё-таки можно ? Можно передать в widget который завернут в subwindow указатель на нужное меню, потом делать с ним все что угодно .) Можно сделать слт в главном окне который будет этим заниматся и прикрутить к нему сигналы из виджета subwindow. |
|
|
JohnZ |
26.11.2014, 12:27
Сообщение
#5
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
'lanz' Спасибо за ответ. Попробую реализовать и отпишусь.
|
|
|
Текстовая версия | Сейчас: 27.4.2024, 10:03 |