Безопасность: Как показать / скрыть, по паролю, QGroupBox в Qt App

Я пытаюсь подготовить свое приложение Qt (на C ++) для использования различными профилями пользователей: пользователь root а также обычный пользователь, поэтому я хочу скрыть определенные корневые параметры (ограниченный QGroupBox) в обычный пользователь режим, а затем, когда это необходимо пользователь root он мог ввести его пароль (в пункте меню безопасности, который я уже кодировал), чтобы показать их. Это возможно в том же графическом интерфейсе? Я действительно застрял с этой реализацией безопасности …

Итак, как я могу кодировать скрытый QGroupBox, который будет показан только пользователь root когда его пользователь / пароль вводится в пункте меню безопасности, о котором я упоминал ранее? Как это реализовать?

Есть ли в Qt специальная процедура для этого или какая-либо идея в другом случае?

Большое спасибо!

Последнее обновление:
Я использовал предложения @The Badger и у меня есть первая версия, которая работает примерно так, как я хотел.

-1

Решение

Есть несколько вариантов:

Каждый раз перед тем, как виджет рисуется / показывается, проверяйте, какой уровень доступа имеет пользователь, и в зависимости от того, отображают или скрывают элементы управления:

void MyWidget::showEvent(QShowEvent * event) {
if(d_admin == true) {
ui->myAdminEdit->setVisible(true);
} else {
ui->myAdminEdit->setVisible(false);
}
/* Or one line */
ui->myAdminButton->setVisible(d_admin);
}

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

/* In some constructor */
ui->myAdminEdit->setVisible(false);
ui->myAdminButton->setVisible(false);
connect(autClass, SIGNAL(adminLoggedIn(bool)), ui->myAdminEdit, SLOT(setVisible(bool)));
connect(autClass, SIGNAL(adminLoggedIn(bool)), ui->myAdminButton, SLOT(setVisible(bool)));

/* And then after authentication */
isAdmin = authenticate(username, password);
emit adminLoggedIn(isAdmin);

После выброса виджеты станут видимыми.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]