Поочерёдное открытие окон в Qt

295
05 апреля 2017, 16:34

Например, есть QMainWindow, где находится форма входа (логин, пароль). При нажатии открывается еще один QMainWindow, уже сама программа, а старое окно закрывается при вводе данных.

Правильно ли такое соотношение? В этом случае, мне не нравится то, что когда окно закрывается, второе окно отображается в другом месте, и размеры окна тоже меняются (или же уходит с полноэкранного режима).

Или лучше сделать так: одно окно QMainWindow, на котором будет панель с логином; при вводе верных данных скрыть его и открыть другую панель, где сама суть проги.

Посоветуйте, как правильно поступить. В Qt я новичок.

Answer 1

На мой взгляд, тащить QMainWindow ради формы с логином и паролем это чересчур.

Первый вариант: если вам при загрузке программы уже надо иметь QMainWindow на весь экран, то проще отнаследоваться от QWidget, реализовать поля ввода и их логику. Разместить его в QMainWindow.

Второй вариант: если QMainWindow пока не нужен, а нужна просто форма с полями ввода, то отнаследуйтесь от QDialog. Запускайте его.

При готовности, передавайте введённые данные дальше в обработчик. Если данные корректны, то (первый вариант) удаляете QWidget и размещаете новый centralWidget на QMainWindow со всем вашим интерфейсом или (второй вариант) закрываете QDialog и создаёте QMainWindow.

В любом случае, если основное окно долго создавать, то его можно сделать сразу при загрузке программы, а после ввода данные просто вставлять в layout.

Если вообще ничего неохота удалять, закрывать и тд, то QStackedWidget без возможности пользовательского переключения. На одной вкладке будет ваша форма, на другой всё остальное. Меняете программно.

Answer 2

Все оказалось действительно просто, решил оставить 1 вариант и использовать следующее:
this->setGeometry(parent->geometry());

READ ALSO
Как передать в функцию массив, который хранится в обьекте

Как передать в функцию массив, который хранится в обьекте

У меня в объекте класса хранится инициализированный массивТеперь нужно в отдельной функции сделать манипуляции с этим массивом, но мне его...

179
проблемы stm32 uart

проблемы stm32 uart

Всем приветВозникла небольшая проблема

348
Натуральные числа, не делящиеся ни на один из квадратов простых чисел [требует правки]

Натуральные числа, не делящиеся ни на один из квадратов простых чисел [требует правки]

Нужно найти все натуральные числа, не делящиеся ни на один из квадратов простых чисел и не превышающие число N (1 <= N <= 10^9)

216
Как сделать пересекающиеся оси на d3.js?

Как сделать пересекающиеся оси на d3.js?

Добрый день! Создаю стандартные оси OX, OYВсе замечательно, но нулевая точка обозначается по каждой из осей, причем текст пересекается самой...

306