Russian Qt Forum
Ноябрь 23, 2024, 12:22
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
Непонятки с авторизацией кБД
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Непонятки с авторизацией кБД (Прочитано 1939 раз)
zharkov1977
Гость
Непонятки с авторизацией кБД
«
:
Июнь 10, 2013, 14:31 »
При запуске приложения - выходит форма с авторизацией...
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QtSql/QSqlDatabase>
#include <QTextCodec>
#include "forms/login.h"
QSqlDatabase db;
void initTextCodecs(const char *codecName)
{
QTextCodec *codec = QTextCodec::codecForName(codecName);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForTr(codec);
}
int main(int argc, char *argv[])
{
initTextCodecs("CP-1251");
QApplication a(argc, argv);
Login login(&db);
if(login.exec() != QDialog::Accepted)
{
return 0;
}
MainWindow w(db.database());
w.setWindowFlags(Qt::Window);
w.setWindowState(w.windowState() | Qt::WindowMaximized);
w.show();
return a.exec();
}
login.h
#include <QDialog>
#include <QtSql/QSqlDatabase>
#include <QLineEdit>
class Login : public QDialog
{
Q_OBJECT
public:
explicit Login(QSqlDatabase* db,QWidget *parent = 0);
signals:
public slots:
void loginSlot();
void cancelSlot();
private:
QPushButton* loginButton;
QPushButton* cancelButton;
QLineEdit *nameDatabase;
QLineEdit *nameUser;
QLineEdit *passwordUser;
int try_;
private:
QSqlDatabase* db_;
login.cpp
#include "login.h"
#include <QtGui>
Login::Login(QSqlDatabase* db, QWidget *parent) :
db_(db),
try_(0),
QDialog(parent)
{
*db_ = QSqlDatabase::addDatabase("QODBC");
setWindowTitle(tr("Вход в систему"));
loginButton = new QPushButton(tr("Логин"));
connect(loginButton, SIGNAL(clicked()), this, SLOT(loginSlot()));
cancelButton = new QPushButton(tr("Отмена"));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancelSlot()));
QVBoxLayout *ButtonLayout = new QVBoxLayout;
ButtonLayout->addStretch();
ButtonLayout->addWidget(loginButton);
ButtonLayout->addWidget(cancelButton);
ButtonLayout->addStretch();
QLabel *nameDatabaseLabel = new QLabel(tr("База данных:"));
nameDatabase = new QLineEdit();
QLabel *nameUserLabel = new QLabel(tr("Имя:"));
nameUser = new QLineEdit();
QLabel *passwordUserLabel = new QLabel(tr("Пароль:"));
passwordUser = new QLineEdit();
QVBoxLayout *LabelLayout = new QVBoxLayout;
LabelLayout->addWidget(nameDatabaseLabel);
LabelLayout->addWidget(nameUserLabel);
LabelLayout->addWidget(passwordUserLabel);
QVBoxLayout *LineLayout = new QVBoxLayout;
LineLayout->addWidget(nameDatabase);
LineLayout->addWidget(nameUser);
LineLayout->addWidget(passwordUser);
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addLayout(LabelLayout);
mainLayout->addLayout(LineLayout);
mainLayout->addLayout(ButtonLayout);
setLayout(mainLayout);
this->resize(300,150);
}
void Login::loginSlot()
{
db_->setDatabaseName(nameDatabase->text());
db_->setUserName(nameUser->text());
db_->setPassword(passwordUser->text());
if(!db_->open())
{
try_++;
if(try_ == 3)
this->reject();
nameDatabase->clear();
nameUser->clear();
passwordUser->clear();
}
else
{
this->accept();
}
}
void Login::cancelSlot()
{
this->reject();
}
Настроен драйвер PostgreSQL Unicode ODBC в системе .
при запуске если указать только setDatabaseName - база данных открыта и доступна,
если указывать кроме этого и пароль - то db.open возвращает false...
Посмотрел примеры по документации , но ничем они мне не помогли...
Подскажите как правильно сделать авторизацию пользователей?
Записан
Majestio
Гость
Re: Непонятки с авторизацией кБД
«
Ответ #1 :
Июнь 10, 2013, 14:58 »
Я бы предложил другой вариант. Сделать авторизацию сперва без диалога, просто в основной форме, без интерактива. Повесить подключение/авторизацию по кнопочке, после каждого сомнительного оператора выводить отладку по qDebug() << "Переменная:" << yourVar;
Посмотреть как все проходит. После этого уже наворачивать диалоги, передачи параметров и пр. И еще совет - смысл гонять по экземплярам классов хэндл базы, коль он объявлен отдельно? ИМХО имеет смысл создать myglobal.h и в нем прописать: "external QSqlDatabase db;", этот заголовок включать во все остальные классы.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...