Ruslan Polupan
July 20, 2019, 1:36 p.m.

IMpos project. Part 006. Connection to the central Fierbird base. Dialogue for setting up a connection to the central bank.

CB connection settings dialog

We will store the connection settings using QSettings in a text file, i.e. using QSettings::IniFormat. In the DataBases class, add the bool connectCenralDB() method in which we implement the connection.
If the connection attempt is unsuccessful, we call the connection settings dialog ConnectionSettingDialog in which it is possible to change the settings.


connectionsettingdialog.h

  1. #ifndef CONNECTIONSETTINGDIALOG_H
  2. #define CONNECTIONSETTINGDIALOG_H
  3.  
  4. #include <QDialog>
  5.  
  6. namespace Ui {
  7. class ConnectionSettingDialog;
  8. }
  9.  
  10. class ConnectionSettingDialog : public QDialog
  11. {
  12. Q_OBJECT
  13.  
  14. public:
  15. explicit ConnectionSettingDialog(QWidget *parent = nullptr);
  16. ~ConnectionSettingDialog();
  17.  
  18. private slots:
  19. void on_buttonBox_accepted();
  20.  
  21. void on_buttonBox_rejected();
  22.  
  23. private:
  24. Ui::ConnectionSettingDialog *ui;
  25. private:
  26. void readConnData(); //Чтение настроек подключения
  27. void saveConnData(); //Запись настроек подключения
  28. };
  29.  
  30. #endif // CONNECTIONSETTINGDIALOG_H
  31.  

connectionsettingdialog.cpp

  1. #include "connectionsettingdialog.h"
  2. #include "ui_connectionsettingdialog.h"
  3. #include "LoggingCategories/loggingcategories.h"
  4. #include "DataBases/databasesettings.h"
  5. #include <QSettings>
  6.  
  7. ConnectionSettingDialog::ConnectionSettingDialog(QWidget *parent) :
  8. QDialog(parent),
  9. ui(new Ui::ConnectionSettingDialog)
  10. {
  11. ui->setupUi(this);
  12. readConnData();
  13. qInfo(logInfo()) << "Открытие диалога настройки подключения.";
  14. }
  15.  
  16. ConnectionSettingDialog::~ConnectionSettingDialog()
  17. {
  18. delete ui;
  19. }
  20.  
  21. void ConnectionSettingDialog::readConnData()
  22. {
  23. QSettings settings(DataBaseSettings::CONFIG_FILE_NAME,QSettings::IniFormat);
  24. settings.beginGroup("DATABASE");
  25. ui->lineEditServer->setText(settings.value("HostName").toString());
  26. ui->lineEditDatabase->setText(settings.value("DataBase").toString());
  27. ui->lineEditUser->setText(settings.value("User").toString());
  28. ui->lineEditPassword->setText(settings.value("Password").toString());
  29. settings.endGroup();
  30. }
  31.  
  32. void ConnectionSettingDialog::saveConnData()
  33. {
  34. QSettings settings(DataBaseSettings::CONFIG_FILE_NAME,QSettings::IniFormat);
  35. settings.beginGroup("DATABASE");
  36. settings.setValue("HostName",ui->lineEditServer->text().trimmed());
  37. settings.setValue("DataBase",ui->lineEditDatabase->text().trimmed());
  38. settings.setValue("User",ui->lineEditUser->text().trimmed());
  39. settings.setValue("Password",ui->lineEditPassword->text().trimmed());
  40. settings.endGroup();
  41. }
  42.  
  43. void ConnectionSettingDialog::on_buttonBox_accepted()
  44. {
  45. saveConnData();
  46. this->accept();
  47. }
  48.  
  49. void ConnectionSettingDialog::on_buttonBox_rejected()
  50. {
  51. this->reject();
  52. }

Mетод bool connectCenralDB()

  1. bool DataBases::connectCenralDB()
  2. {
  3. bool result = true;
  4. //Указываем имя файла настроек
  5. QSettings settings(DataBaseSettings::CONFIG_FILE_NAME, QSettings::IniFormat);
  6. //Создаем подключение по умолчанию к базе данных FireBird
  7. QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
  8.  
  9. //Установка параметров подключения из файла настроек
  10. settings.beginGroup("DATABASE");
  11. db.setHostName(settings.value("HostName").toString());
  12. db.setDatabaseName(settings.value("DataBase").toString());
  13. db.setUserName(settings.value("User").toString());
  14. db.setPassword(settings.value("Password").toString());
  15. settings.endGroup();
  16. //Открываем базу данных, если попытка не удачная вызываем диалог настроек подключения
  17. if(!db.open()) {
  18. qCritical(logCritical()) << "Не возможно подключиться к базе данных." << endl << "Причина:" << db.lastError().text();
  19. int rez = QMessageBox::question(nullptr, QObject::tr("Ошибка подключения"),
  20. "Не могу установить соединение с базой данных.\nПроверить настройки подключения?",
  21. QMessageBox::Yes | QMessageBox::No);
  22. if(rez == QMessageBox::Yes) {
  23. ConnectionSettingDialog *connDlg = new ConnectionSettingDialog();
  24. int result = connDlg->exec();
  25. if(result == QDialog::Accepted) {
  26. qInfo(logInfo()) << "Сохранение настроек подключения.";
  27. }
  28. }
  29. //Завершаем работу
  30. result = false;
  31. } else {
  32. qInfo(logInfo()) << "Успешное подключение к центральной базе данных.";
  33. result = true;
  34. }
  35.  
  36. return result;
  37.  
  38. }

In main.cpp, before calling the main window, add

  1. if(!db->connectCenralDB()){
  2. qInfo(logInfo()) << "Завершение работы. Не удалось подключится к центральной базе.";
  3. return 1;
  4. }

We launch the application.
The message appears

After clicking the Yes button, the connection settings window will be displayed. We fill it.

The program is closed. A configuration file appears in the project's build directory.
iMpos.config

  1. [DATABASE]
  2. HostName=192.168.123.11
  3. DataBase=sunoil
  4. User=SYSDBA
  5. Password=sunoil00

When you follow the start, the settings are read and connected to the central database.

Project archive:

iMposCh006.zip iMposCh006.zip

By article asked0question(s)

3

Do you like it? Share on social networks!

IscanderChe
  • July 20, 2019, 4:26 p.m.

Такой вид диалоговых окон на десятой винде?

Ruslan Polupan
  • July 20, 2019, 4:42 p.m.

Да, такой вид.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • AK
    April 1, 2025, 11:41 a.m.
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    March 9, 2025, 9:02 p.m.
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    March 9, 2025, 4:14 p.m.
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
  • Evgenii Legotckoi
    Oct. 31, 2024, 11:37 p.m.
    Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup