Qt. Многооконное приложение
Я не знаю, как сказать корректно (подскажите в этом тоже, пожалуйста :) ), поэтому введу следующие определения:
- Форма - это просто Qt форма.
- Окно - это то, что мы видим, что-то типа слайдов какой-то формы.
Начал заниматься Qt, и появились вопросы при создании десктопных приложений на формах. Когда форма всего 1 и окно тоже всего 1, то все просто, но порой это очень даже неудобно. Допустим я захотел создать свое меню. Открываю программу, появляется меню. А дальше я жму на необходимую кнопку и..?
Варианты, которые пришли мне в голову:
- Открывается новая форма, и, может быть, скрывается прошлая. Но это выглядит не круто + в панели задач появляется еще одно приложение, хотелось бы, чтобы все происходило в рамках одной формы mainWindow.
- Ну, все-таки есть у элементов в форме атрибут Видимость. То есть я могу просто нажать на кнопку и просто сделать ненужные кнопки от меню невидимыми, а нужное - видимым. Хорошо. Но тут возникает проблема, если составлять форму в дизайнере, то это становится похожим на какую-то солянку, поскольку в дереве объектов все скорее всего на одном уровне вложенности, и разбираться в этом не хочется.
- Хорошо, первый вариант мне не подходит, второй лучше, но неудобно. Попробую использовать контейнеры. Стало конечно получше, потому что мне нужно прятать не каждый элемент, а только контейнер. Но проблема загроможденности остается. Все это на одной форме. Плюс это только дизайн. По моим представлениям, я хочу сделать, чтобы у меня каждое такое скрываемое-раскрываемое окно обладало каким-то своим функционалом, возможно связанным с данными из прошлого окна (например, я авторизовался, и мне нужно знать, а успешно ли, и какая роль у пользователя для обеспечения его нужным функционалом), возможно нет (какое-нибудь окно настроек, которое ни от чего не зависит).
- MDI Area. Многодокументный интерфейс[1] (англ. multiple document interface, MDI) — способ организации графического интерфейса пользователя, предполагающий использование оконного интерфейса, в котором большинство окон (исключая, как правило, только модальные окна) расположены внутри одного общего окна. По-моему то, что нужно. Тогда я могу просто закидывать внутрь этой области целые формы, которые обладают своим функционалом, и которые я могу связать с какими-то внешними данными при помощи конструктора. Можно растянуть MDI Area на всю главную форму, закидывать туда форму, у которой я срежу шапку с названием, кнопками min/max/close и которую растяну на весь родительский элемент, то есть на всю MDI Area, а соответственно на всю главную форму.
Собственно, вопрос в том, насколько последнее 4-е решение является правильным в разработке. Просто все еще посещает мысль, что это какое-то overthinking. Какие есть еще альтернативные методы создания многооконных приложений с 1 главной формой? Честно говоря, не смог найти решений в интернете, кроме как этих. Видел похожее с помощью QML, который просто скрывал лишнее. Но мне кажется, что это все равно неудобно. Не сказать, чтобы я очень хорошо освоил Qt, и может быть есть простейшие решения, который я пропустил. Подскажите, пожалуйста :)
Еще подумал. Если возможно реализовать многооконное приложение, то как можно его косметически украсить? Я подумал о QSS, но слабо представляю, как это реализовать
Ответы (1 шт):
Открывать новое окно с нужным вам содержимым по сути единственный способ добиться того, чего вы хотите, если правильно понял задачу. Также возможно вам стоит сначала сделать макет интерфейса, если он не тривиальный, перед началом его разработки.
QSS является очень гибким инструментом настройки, в целом для его использования хватает примеров из документации. Пример использования QSS
Так же рекомендую посмотреть в сторону QDockWidget.