add: persist last successful connection config and show connection errors

This commit is contained in:
Andrey Kutin 2026-10-23 21:04:12 +03:00
parent 71def5d8ae
commit be51020e75
2 changed files with 44 additions and 20 deletions

View File

@ -1,20 +1,35 @@
#include "auth.h"
#include <QMessageBox>
#include <QSettings>
#include <QSqlError>
auth::auth(QWidget *parent)
: QWidget{ parent }, _nicknameLabel (new QLabel ("nickname:")),
_nicknameEdit (new QLineEdit ()),
_passwordLabel (new QLabel ("passwprd:")),
_passwordEdit (new QLineEdit ()),
_addressLabel (new QLabel ("address:")), _addressEdit (new QLineEdit ()),
_portLabel (new QLabel ("port:")), _portEdit (new QLineEdit ()),
_okButton (new QPushButton ("&OK")),
_quitButton (new QPushButton ("&QUIT")), _vbox (new QVBoxLayout (parent))
: QWidget{parent}
, _nicknameLabel(new QLabel("nickname:"))
, _nicknameEdit(new QLineEdit())
, _passwordLabel(new QLabel("passwprd:"))
, _passwordEdit(new QLineEdit())
, _addressLabel(new QLabel("address:"))
, _addressEdit(new QLineEdit())
, _portLabel(new QLabel("port:"))
, _portEdit(new QLineEdit())
, _okButton(new QPushButton("&OK"))
, _quitButton(new QPushButton("&QUIT"))
, _vbox(new QVBoxLayout(this))
, _db(QSqlDatabase::addDatabase("QPSQL"))
{
_nicknameLabel->setAlignment (Qt::AlignHCenter);
_passwordLabel->setAlignment (Qt::AlignHCenter);
_addressLabel->setAlignment (Qt::AlignHCenter);
_portLabel->setAlignment (Qt::AlignHCenter);
_passwordEdit->setEchoMode (QLineEdit::Password);
QSettings settings ("mysitenews", "mysitenews");
_nicknameEdit->setText (settings.value ("db/user").toString ());
_passwordEdit->setText (settings.value ("db/password").toString ());
_addressEdit->setText (settings.value ("db/host").toString ());
_portEdit->setText (settings.value ("db/port", "5432").toString ());
_vbox->addWidget (_nicknameLabel);
_vbox->addWidget (_nicknameEdit);
_vbox->addWidget (_passwordLabel);
@ -33,16 +48,24 @@ auth::auth (QWidget *parent)
void
auth::onAuth ()
{
QSqlDatabase *db = new QSqlDatabase(QSqlDatabase::addDatabase("QPSQL"));
db->setHostName(_addressEdit->text());
db->setPort(_portEdit->text().toInt());
db->setDatabaseName("cards");
db->setUserName(_nicknameEdit->text());
db->setPassword(_passwordEdit->text());
bool ok = db->open();
if (ok) {
emit dbOpenned(db);
QSettings settings ("mysitenews", "mysitenews");
_db.setHostName(_addressEdit->text());
_db.setPort(_portEdit->text().toInt());
_db.setDatabaseName(settings.value ("db/database", "cards").toString ());
_db.setUserName(_nicknameEdit->text());
_db.setPassword(_passwordEdit->text());
if (!_db.open()) {
QMessageBox::critical(this, tr("Ошибка подключения"),
_db.lastError().text());
return;
}
settings.setValue ("db/host", _db.hostName ());
settings.setValue ("db/port", _db.port ());
settings.setValue ("db/database", _db.databaseName ());
settings.setValue ("db/user", _db.userName ());
settings.setValue ("db/password", _db.password ());
emit dbOpenned(_db);
close();
}

3
auth.h
View File

@ -26,10 +26,11 @@ private:
QPushButton *_okButton = nullptr;
QPushButton *_quitButton = nullptr;
QVBoxLayout *_vbox = nullptr;
QSqlDatabase _db;
public slots:
void onAuth ();
signals:
void dbOpenned(QSqlDatabase *);
void dbOpenned(const QSqlDatabase &);
};
#endif // AUTH_H