Ruslan Polupan
Шілде 20, 2019, 1:36 Т.Қ.

iMpos жобасы. Бөлім 006. Fierbird орталық базасына қосылу. Орталық банкке қосылуды орнатуға арналған диалог.

Диалог настроек подключения к ЦБ

Хранить настройки подключения будем с использованием QSettings в текстовом файле, т.е. используя QSettings::IniFormat. В класс DataBases добавим метод bool connectCenralDB() в котором и реализуем подключение.
Если попытка подключения не удачна вызываем диалог настроек подключения ConnectionSettingDialog в котором возможно изменение настроек.


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. }

В main.cpp перед вызовом основного окна добавляем

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

Запускаем приложение.
Появляется сообщение

После нажатия кнопки Да отобразится окно настроек подключения. Заполняем его.

Программа закрывается. В каталоге сборки проекта появляется файл с настройками.
iMpos.config

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

При следуем запуске происходит чтение настроек и подключение к центральной базе данных.

Архив проекта:

iMposCh006.zip iMposCh006.zip

Мақала бойынша сұралады0сұрақтар(лар)

3

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

IscanderChe
  • Шілде 20, 2019, 4:26 Т.Қ.

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

Ruslan Polupan
  • Шілде 20, 2019, 4:42 Т.Қ.

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

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз