Dialog zum Bearbeiten des Benutzerverzeichnisses
Fügen Sie im Formular mainwindow.ui den Menüpunkt Benutzer hinzu, dem das Objekt actionUsers entspricht. Weisen Sie ihm ein Symbol und einen Hotkey zu.
Erstellen Sie eine Qt Designer-Formularklasse mit dem Namen UsersDialog.
Im Slot MainWindow::on_actionUsers_triggered() implementieren wir den Aufruf des Users-Dialogs.
void MainWindow::on_actionUsers_triggered() { UsersDialog *usersDlg = new UsersDialog(this); usersDlg->move(this->geometry().center().x() - usersDlg->geometry().center().x(), this->geometry().center().y() - usersDlg->geometry().center().y()); usersDlg->exec(); }
Wir fügen dem Dialog mithilfe von Qt Designer Steuerelemente hinzu.
Implementierung der UserDialog-Klasse
userdialog.h
#ifndef USERSDIALOG_H #define USERSDIALOG_H #include <QDialog> #include <QSqlQuery> #include <QSqlError> #include <QTableWidgetItem> namespace Ui { class UsersDialog; } class UsersDialog : public QDialog { Q_OBJECT public: explicit UsersDialog(QWidget *parent = nullptr); ~UsersDialog(); private slots: void on_pushButtonAdd_clicked(); void on_buttonBox_accepted(); void on_tableWidget_itemSelectionChanged(); void on_buttonBox_rejected(); void on_pushButtonEdit_clicked(); void on_pushButtonClose_clicked(); void on_tableWidget_cellDoubleClicked(int row, int column); private: void createUI(); //Создание первоначального интерефейса void createTable(); //Заолнение TableWidget private: Ui::UsersDialog *ui; QSqlDatabase db; // Объект Базы данных QTableWidgetItem *currentItem; //Текущий оператор. bool isNew; //Выполняется добавление оператора или правка }; #endif // USERSDIALOG_H
userdialog.cpp
#include "usersdialog.h" #include "ui_usersdialog.h" #include "LoggingCategories/loggingcategories.h" #include <QMessageBox> UsersDialog::UsersDialog(QWidget *parent) : QDialog(parent), ui(new Ui::UsersDialog) { ui->setupUi(this); //Используем соединение options db = QSqlDatabase::database("options"); createUI(); } UsersDialog::~UsersDialog() { delete ui; } void UsersDialog::createUI() { ui->groupBoxUserData->hide(); //Скрываем информацию о пользователе. ui->checkBoxIsActive->setChecked(true); //Устанавливаем выбранным //Колличество столбцов ui->tableWidget->setColumnCount(5); //Заолняем TableWidget данными createTable(); } void UsersDialog::createTable() { //заголовки столбцов ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"ID"<<"Логин"<<"Пароль"<<""<<"Активность"); QSqlQuery q = QSqlQuery(db); //Получаем список пользователей if(!q.exec("select user_id, fio, password, isactive FROM users order by user_id")) qCritical(logCritical())<< "Не возможно получить список пользователей" << q.lastError().text(); int i = 0; //Текущая строка //Создаем и заполняем таблицу пользователей while(q.next()){ ui->tableWidget->insertRow(i); ui->tableWidget->setItem(i,0,new QTableWidgetItem(q.value(0).toString())); ui->tableWidget->setItem(i,1,new QTableWidgetItem(q.value(1).toString())); ui->tableWidget->setItem(i,2,new QTableWidgetItem(q.value(2).toString())); ui->tableWidget->setItem(i,3,new QTableWidgetItem(q.value(3).toString())); if(q.value(3).toBool()){ ui->tableWidget->setItem(i,4, new QTableWidgetItem(QIcon(":/Image/userActive.png"),"Активен")); } else { ui->tableWidget->setItem(i,4, new QTableWidgetItem(QIcon(":/Image/userNoActive.png"),"Не Активен")); } ++i; } //Скрываем горизонтальный заголовок и 3-й столбец ui->tableWidget->verticalHeader()->hide(); ui->tableWidget->hideColumn(3); //Ширина колонки по содержимому ui->tableWidget->resizeColumnsToContents(); //Высота сторок ui->tableWidget->verticalHeader()->setDefaultSectionSize(40); ui->pushButtonEdit->setDisabled(true); } void UsersDialog::on_pushButtonAdd_clicked() { ui->groupBoxUserData->show(); ui->tableWidget->setDisabled(true); ui->pushButtonAdd->setDisabled(true); ui->pushButtonEdit->setDisabled(true); isNew = true; } void UsersDialog::on_buttonBox_accepted() { //Простая проверка заполнения полей if(ui->lineEditLogin->text().size()<3 || ui->lineEditPass->text().size()<1) { QMessageBox::warning(this,"Ошибка","Не заполнены обязательные поля."); return; } QSqlQuery q = QSqlQuery(db); if(isNew){ //Новая запись q.prepare("INSERT INTO `users`(`fio`,`password`) VALUES (:userName,:passw)"); q.bindValue(":userName", ui->lineEditLogin->text().trimmed()); q.bindValue(":passw", ui->lineEditPass->text().trimmed()); if(q.exec()){ //Очищаем TableWidget ui->tableWidget->clear(); ui->tableWidget->setRowCount(0); //Заолняем TableWidget обновленными данными createTable(); } else { qInfo(logInfo()) << "Не удалось добавить опреатора" << q.lastError().text(); } } else { //Редактируем запись q.prepare("UPDATE users SET fio = :userName, password = :passw, isactive = :isactive WHERE user_id = :userid"); q.bindValue(":userName", ui->lineEditLogin->text().trimmed()); q.bindValue(":passw", ui->lineEditPass->text().trimmed()); q.bindValue(":isactive",(ui->checkBoxIsActive->isChecked()) ? "true" : "false" ); q.bindValue(":userid", ui->tableWidget->item(currentItem->row(),0)->text()); if(q.exec()){ //Очищаем TableWidget ui->tableWidget->clear(); ui->tableWidget->setRowCount(0); //Заолняем TableWidget обновленными данными createTable(); } else { qInfo(logInfo()) << "Не удалось обновить данные оператора опреатора" << q.lastError().text(); } } ui->groupBoxUserData->hide(); ui->tableWidget->setEnabled(true); ui->tableWidget->clearSelection(); ui->pushButtonAdd->setEnabled(true); ui->lineEditPass->clear(); ui->lineEditLogin->clear(); } void UsersDialog::on_buttonBox_rejected() { ui->groupBoxUserData->hide(); ui->tableWidget->setEnabled(true); ui->pushButtonAdd->setEnabled(true); ui->tableWidget->clearSelection(); ui->lineEditPass->clear(); ui->lineEditLogin->clear(); } void UsersDialog::on_tableWidget_itemSelectionChanged() { //Получаем текущее выделение currentItem = ui->tableWidget->currentItem(); //разрешаем редактирование ui->pushButtonEdit->setEnabled(true); } void UsersDialog::on_pushButtonEdit_clicked() { ui->groupBoxUserData->show(); ui->tableWidget->setDisabled(true); ui->pushButtonAdd->setDisabled(true); ui->pushButtonEdit->setDisabled(true); //Заполняем объекты данными о выбранном пользователе ui->lineEditLogin->setText(ui->tableWidget->item(currentItem->row(),1)->text()); ui->lineEditPass->setText(ui->tableWidget->item(currentItem->row(),2)->text()); ui->checkBoxIsActive->setChecked(QVariant(ui->tableWidget->item(currentItem->row(),3)->text()).toBool()); isNew = false; } void UsersDialog::on_pushButtonClose_clicked() { this->reject(); } void UsersDialog::on_tableWidget_cellDoubleClicked(int row, int column) { //Вызываем редактирование по двойнгому щелчку мыши Q_UNUSED(row); Q_UNUSED(column); on_pushButtonEdit_clicked(); }
Wir starten das Programm Einstellungen-Benutzer und fügen ein neues hinzu.
Zugriffsbeschränkung
Um den Zugriff auf Einstellungen für alle Benutzer außer dem Administrator in MainWindow::createUI() einzuschränken, werden wir die Anfrage zum Abrufen von Daten über den aktuellen Benutzer ändern und, wenn uiser_id ungleich 1 ist, die entsprechenden Aktionen deaktivieren.
q.exec("SELECT u.user_id, u.fio FROM users u " "INNER JOIN options o ON u.user_id = o.value " "WHERE o.option_id = 1020"); q.next(); labelUsers->setText("Пользователь: "+q.value(1).toString()); if(q.value(0).toInt() != 1){ ui->actionUsers->setEnabled(false); ui->actionSettings->setEnabled(false); }
Wir gehen unter dem neuen Benutzer. Die Menüpunkte im Menü Extras sind nicht aktiv.
Projektarchiv