Я нахожусь в поисках лучшей практики или шаблона проектирования для управления окнами приложения Qt.Существует ли стандартизованный способ управления окнами в приложениях Qt?
Позвольте мне объяснить, что я имею в виду. Скажем, что у меня есть приложение, в котором есть несколько окон (A, B, C), и мне нужно открыть window A
в пределах window B
и убедиться, что новый экземпляр window A
создается с действительными параметрами каждый раз, когда он вызывается, и, наконец, когда нужно показывать window C приносит существующий экземпляр впереди, если какой-либо другой создает новый экземпляр.
Конечно, приложение реального мира намного сложнее и имеет больше окон и ограничений, поэтому я не хочу распространять свои операции управления окнами по всему коду, и я держу их в статическом классе WindowManager
. (На самом деле этот класс является singleton, но я рассматриваю возможность его изменения в статический класс).
Класс WindowManager содержит (частный) QSharedPointer
для каждого окна в системе, поэтому я могу легко манипулировать всеми окнами из любого места в коде. Когда мне нужно показать window X
, я просто вызываю WindowManager::showX(params)
, и все проверки и инициализация происходят в этом коде. Также у меня есть методы, такие как WindowManager::minimizeX()
для обработки некоторой логики, отображения сообщения в системном трее и затем минимизации окна.
Это обычная потребность, и есть ли общий шаблон для решения проблемы? Как вы управляете окнами приложений? Является ли то, что я сделал (статический класс WindowManager), приемлемый?
Редактировать: Приложение представляет собой приложение в системном трее, поэтому между родительскими отношениями нет родительских отношений; вместо этого они все независимы друг от друга, и обычно пользователь вызывает любое окно с помощью (глобальной) горячей клавиши. Однако есть несколько случаев, когда в окне мне нужно открыть еще один, но все же они не могут быть родителями и дочерними.
Не могу сказать, что я написал что-то столь же запутанное, как это. Как правило, главное окно с множеством диалогов, модальное или нет по мере необходимости. Код для обработки конкретного окна входит в класс для этого окна. Если в этом окне/диалоговом окне требуется другое диалоговое окно, он управляет настройкой указанного диалога, но логика все в классе для вторичного диалога. Есть ли что-то, что мешает вам использовать эту модель? – casualcoder
Обычно родители создают своих детей. Создайте дочерний виджет, настройте его, поднимите.Если есть главное окно, это главное окно часто заботится о многих вторичных окнах. Не видите, что этот фактор можно отнести к отдельному классу, посвященному созданию и управлению окнами, и это будет хороший дизайн (синглтоны почти никогда не бывают). –
@casualcoder: на самом деле мое приложение находится в системном трее большую часть своего времени, и пользователь запускает разные окна разными (глобальными) горячими клавишами, и между окнами нет отношений между родителями и дочерними элементами. Окно можно вызвать в другом окне или открыть горячую клавишу. У меня такой вопрос. – destan