Всем Salvete! Я пробую создать систему авторизации. Идея такая. У меня

есть общий лончер, куда я подключаю формы класса Qt widget. Достигаю я этого следующим образом: Подключаю формы к главному окну и добавляю в центральный виджет с помощью setCentralWidget(). Далее если пользователь вызывает другое окно, то происходит все тоже самое. (Через switch).

Вопрос: могу ли я как-то сделать этот процесс динамическим. Через цикл или еще как-нибудь?

13 ответов

6 просмотров

непонятен смысл всего этого действа. Во-первых, то, что вы называете "добавляю в центральный виджет" это не добавление, а установка этого виджета в качестве центрального. Я даже не представляю что происходит в этом случае с виджетом, который был центральным до этого, просто потому, что так никто никогда не делал. Причем здесь "система авторизации" и что такое "общий лончер" вообще непонятно. Надо бы как-то детальней раскрыть задачу. Начнём с вопроса: для чего это вообще?

Мияги- Автор вопроса
Sergey eSKon
непонятен смысл всего этого действа. Во-первых, то...

Спасибо за ответ! Идея: Попытаюсь объяснить. Пытаюсь создать систему, которая проверяет данные пользователя (при авторизации) и предоставляет доступ к определенным приложениям. Причем приложения должны представлять из себя отдельную форму (которую мог создать другой человек, т.е. каждая форма представляет из себя отдельный модуль), которую подключаю в зависимости от прав пользователя. Реализация: Создаю главное окно. Изначально в центральном виджете находится необходимые элементы для проведения авторизации: два QLineEdit, и QPushButton. При нажатии на кнопку я обращаюсь к БД и получаю список доступных приложений для пользователя. Делаю это в цикле и закидываю в QMenuBar: QSqlQuery query = QSqlQuery(db); query.exec("select * from Application"); while(query.next()) { if (query.value(access) == "1") { auto *point = new QAction(query.value(0).toString()); point -> setObjectName(query.value(0).toString()); connect(point, SIGNAL(triggered()), this, SLOT(open())); ui -> menu_apps -> addAction(point); } } В слоте у меня имеется функция open(), при вызове которой в центральный виджет загружается выбранное приложение. Функцию open() я показывал ранее. Примерно как-то так )

Мияги
Спасибо за ответ! Идея: Попытаюсь объяснить. Пыта...

самый главный вопрос - почему у вас всё происходит в одном окне? Обычно для авторизации делается отдельный диалог, а затем уже создавайте любое окно. Почему нужно в одном окно что-то на что-то менять то? Почему просто не создавать разные окна для разных задач?

Мияги- Автор вопроса
Sergey eSKon
самый главный вопрос - почему у вас всё происходит...

Честно говоря в этом суть поставленной задачи ) Не я ее придумал. Что касательно авторизации, решил тоже вынести в отдельную форму, так как при смене виджета через setCentralWidget() предыдущий просто удаляется.

Мияги
Честно говоря в этом суть поставленной задачи ) Не...

ну я лично вижу так задачу. Диалог авторизации - отдельное окно. Затем создаётся главное окно с передачей в параметре некоей переменной, которая обозначает роль пользователя. В конструкторе главное окно просто создаёт соответствующий роли виджет и устанавливает его в качестве центрального

Мияги- Автор вопроса
Sergey eSKon
ну я лично вижу так задачу. Диалог авторизации - о...

Все верно. Только виджет должен быть отдельной формой, которую мог бы разрабатывать другой человек, не вдаваясь в подробности как он будет подключаться в центральное окно. Я сделал, но каждую форму подключаю отдельно через (switch или if / if else). А хотелось бы как-то сделать динамически. Так как форм может быть много. Я думал может быть их засунуть в какой-либо контейнер (вектор например), но они являются разными классами...

Мияги
Все верно. Только виджет должен быть отдельной фор...

В кьюте нет понятия "форма" там всё виджеты. И то, что вы называете формой это и есть виджет. И да, он может отдельно разрабатываться в дизайнере и храниться в файле ui. И да, его можно установить в качестве центрального виджета

Мияги
Все верно. Только виджет должен быть отдельной фор...

что значит "динамически"? Вы когда в конструкторе создаете вашу форму (виджет) и устанавливаете его в качестве центрального - это разве не "динамическое" создание?

Мияги
Все верно. Только виджет должен быть отдельной фор...

про "форм может быть много" не очень понятно. Одновременно? Так одновременно они все не могут быть центральными виджетами. Если же много отдельных окон, то в чём вообще проблема? Создавайте столько окон сколько нужно

Мияги- Автор вопроса
Sergey eSKon
В кьюте нет понятия "форма" там всё виджеты. И то,...

Спасибо за объяснения! Я имею ввиду, чтобы не подключать через бесконечные if, а допустим в цикле

Мияги
Спасибо за объяснения! Я имею ввиду, чтобы не подк...

что в цикле то? цикл то что должен делать?

Мияги- Автор вопроса
Sergey eSKon
про "форм может быть много" не очень понятно. Одно...

Нет. В программе может быть много. А от этого растут количество if

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта