Я предлагаю использовать State Machine для управления всем вашим статусом. Его также довольно легко расширить.
- Прочитайте документы State Machine Framework в Справке Qt.
- После того, как вы приобретете некоторые базовые знания о структуре конечного автомата Qt, вы можете понять подход, приведенный ниже.
а.) Определите необходимое состояние, например, Гость, залогинился, вышел из системы. У вас может быть 3 диалоговых окна (здесь я определил дополнительный выходящий из системы диалог) для каждого состояния, подключите сигнал ввода состояния к слоту показа диалога и подключите сигнал выхода из состояния к слоту скрытия диалога. Таким образом, вам не нужно беспокоиться о том, когда показывать / скрывать диалог, просто сосредоточьтесь на переходе состояний.
б). Определите сигналы для диалогов, например, сигнал «loggedIn» для loginWindow, сигнал «loggedOut» для TasksWindow, добавьте переход, инициируемый сигналом «loggedIn», из состояния «Гость» во вход в систему.
с). Таким образом, начальное состояние конечного автомата - «гость», и при входе в это состояние появляется ваше окно входа в систему. После того, как информация для входа была проверена, был выдан сигнал «loggedIn», и состояние компьютера изменится с «гостя» на «Вход в систему», поэтому loginWindow будет скрыто при выходе из состояния «Гость», и ваше окно TasksWindow будет отображается при входе в состояние "Вход в систему".
г). Вы можете завершить сеанс, нажав кнопку «Выйти» в окне TasksWindow, также вам нужно определить тривиумы для изменения состояний.
е). Хитрость здесь: вы можете определить конечное состояние и подключить сигнал «закончен» или «остановлен» конечного автомата к слоту «выход» вашего приложения. Затем, после того как вы все сделаете, приложение будет автоматически закрыто на автомате.
Легко поддерживать и расширять, и логика очень ясна с помощью конечного автомата.