Диалог настроек подключения к ЦБ
Хранить настройки подключения будем с использованием QSettings в текстовом файле, т.е. используя QSettings::IniFormat. В класс DataBases добавим метод bool connectCenralDB() в котором и реализуем подключение.
Если попытка подключения не удачна вызываем диалог настроек подключения ConnectionSettingDialog в котором возможно изменение настроек.
connectionsettingdialog.h
- #ifndef CONNECTIONSETTINGDIALOG_H
- #define CONNECTIONSETTINGDIALOG_H
- #include <QDialog>
- namespace Ui {
- class ConnectionSettingDialog;
- }
- class ConnectionSettingDialog : public QDialog
- {
- Q_OBJECT
- public:
- explicit ConnectionSettingDialog(QWidget *parent = nullptr);
- ~ConnectionSettingDialog();
- private slots:
- void on_buttonBox_accepted();
- void on_buttonBox_rejected();
- private:
- Ui::ConnectionSettingDialog *ui;
- private:
- void readConnData(); //Чтение настроек подключения
- void saveConnData(); //Запись настроек подключения
- };
- #endif // CONNECTIONSETTINGDIALOG_H
connectionsettingdialog.cpp
- #include "connectionsettingdialog.h"
- #include "ui_connectionsettingdialog.h"
- #include "LoggingCategories/loggingcategories.h"
- #include "DataBases/databasesettings.h"
- #include <QSettings>
- ConnectionSettingDialog::ConnectionSettingDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::ConnectionSettingDialog)
- {
- ui->setupUi(this);
- readConnData();
- qInfo(logInfo()) << "Открытие диалога настройки подключения.";
- }
- ConnectionSettingDialog::~ConnectionSettingDialog()
- {
- delete ui;
- }
- void ConnectionSettingDialog::readConnData()
- {
- QSettings settings(DataBaseSettings::CONFIG_FILE_NAME,QSettings::IniFormat);
- settings.beginGroup("DATABASE");
- ui->lineEditServer->setText(settings.value("HostName").toString());
- ui->lineEditDatabase->setText(settings.value("DataBase").toString());
- ui->lineEditUser->setText(settings.value("User").toString());
- ui->lineEditPassword->setText(settings.value("Password").toString());
- settings.endGroup();
- }
- void ConnectionSettingDialog::saveConnData()
- {
- QSettings settings(DataBaseSettings::CONFIG_FILE_NAME,QSettings::IniFormat);
- settings.beginGroup("DATABASE");
- settings.setValue("HostName",ui->lineEditServer->text().trimmed());
- settings.setValue("DataBase",ui->lineEditDatabase->text().trimmed());
- settings.setValue("User",ui->lineEditUser->text().trimmed());
- settings.setValue("Password",ui->lineEditPassword->text().trimmed());
- settings.endGroup();
- }
- void ConnectionSettingDialog::on_buttonBox_accepted()
- {
- saveConnData();
- this->accept();
- }
- void ConnectionSettingDialog::on_buttonBox_rejected()
- {
- this->reject();
- }
Mетод bool connectCenralDB()
- bool DataBases::connectCenralDB()
- {
- bool result = true;
- //Указываем имя файла настроек
- QSettings settings(DataBaseSettings::CONFIG_FILE_NAME, QSettings::IniFormat);
- //Создаем подключение по умолчанию к базе данных FireBird
- QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
- //Установка параметров подключения из файла настроек
- settings.beginGroup("DATABASE");
- db.setHostName(settings.value("HostName").toString());
- db.setDatabaseName(settings.value("DataBase").toString());
- db.setUserName(settings.value("User").toString());
- db.setPassword(settings.value("Password").toString());
- settings.endGroup();
- //Открываем базу данных, если попытка не удачная вызываем диалог настроек подключения
- if(!db.open()) {
- qCritical(logCritical()) << "Не возможно подключиться к базе данных." << endl << "Причина:" << db.lastError().text();
- int rez = QMessageBox::question(nullptr, QObject::tr("Ошибка подключения"),
- "Не могу установить соединение с базой данных.\nПроверить настройки подключения?",
- QMessageBox::Yes | QMessageBox::No);
- if(rez == QMessageBox::Yes) {
- ConnectionSettingDialog *connDlg = new ConnectionSettingDialog();
- int result = connDlg->exec();
- if(result == QDialog::Accepted) {
- qInfo(logInfo()) << "Сохранение настроек подключения.";
- }
- }
- //Завершаем работу
- result = false;
- } else {
- qInfo(logInfo()) << "Успешное подключение к центральной базе данных.";
- result = true;
- }
- return result;
- }
В main.cpp перед вызовом основного окна добавляем
- if(!db->connectCenralDB()){
- qInfo(logInfo()) << "Завершение работы. Не удалось подключится к центральной базе.";
- return 1;
- }
Запускаем приложение.
Появляется сообщение
После нажатия кнопки Да отобразится окно настроек подключения. Заполняем его.
Программа закрывается. В каталоге сборки проекта появляется файл с настройками.
iMpos.config
- [DATABASE]
- HostName=192.168.123.11
- DataBase=sunoil
- User=SYSDBA
- Password=sunoil00
При следуем запуске происходит чтение настроек и подключение к центральной базе данных.
Архив проекта:
Такой вид диалоговых окон на десятой винде?
Да, такой вид.