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