mirror of
https://github.com/andre-wojtowicz/qt-sql-example.git
synced 2024-11-26 15:45:27 +01:00
Added project files
This commit is contained in:
commit
ad0d38876b
41
.gitignore
vendored
Normal file
41
.gitignore
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# C++ objects and libs
|
||||||
|
|
||||||
|
*.slo
|
||||||
|
*.lo
|
||||||
|
*.o
|
||||||
|
*.a
|
||||||
|
*.la
|
||||||
|
*.lai
|
||||||
|
*.so
|
||||||
|
*.dll
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Qt-es
|
||||||
|
|
||||||
|
/.qmake.cache
|
||||||
|
/.qmake.stash
|
||||||
|
*.pro.user
|
||||||
|
*.pro.user.*
|
||||||
|
*.qbs.user
|
||||||
|
*.qbs.user.*
|
||||||
|
*.moc
|
||||||
|
moc_*.cpp
|
||||||
|
moc_*.h
|
||||||
|
qrc_*.cpp
|
||||||
|
ui_*.h
|
||||||
|
Makefile*
|
||||||
|
*build-*
|
||||||
|
|
||||||
|
build/*
|
||||||
|
|
||||||
|
# QtCreator
|
||||||
|
|
||||||
|
*.autosave
|
||||||
|
|
||||||
|
# QtCtreator Qml
|
||||||
|
*.qmlproject.user
|
||||||
|
*.qmlproject.user.*
|
||||||
|
|
||||||
|
# QtCtreator CMake
|
||||||
|
CMakeLists.txt.user*
|
||||||
|
|
9
README.md
Normal file
9
README.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# QT SQL Example
|
||||||
|
|
||||||
|
An exemplary Qt app that connects to SQL server and displays a table from a database. The program was made for educational purposes.
|
||||||
|
|
||||||
|
![](screenshot.png)
|
||||||
|
|
||||||
|
The program was tested on:
|
||||||
|
* client: Windows 10, Qt 5.9.1,
|
||||||
|
* servers: MySQL Server 5.5.57, Microsoft SQL Server 2008 R2 SP3.
|
9
config.ini
Normal file
9
config.ini
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[sql]
|
||||||
|
engine=mssql
|
||||||
|
driver=SQL Server
|
||||||
|
address=localhost\\SQLEXPRESS
|
||||||
|
port=1433
|
||||||
|
authentication=server
|
||||||
|
login=user
|
||||||
|
password=password
|
||||||
|
database=db
|
22
qt-sql-example.pro
Normal file
22
qt-sql-example.pro
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
VERSION = 1.0
|
||||||
|
QMAKE_TARGET_DESCRIPTION = "Qt app that displays SQL table; for educational purposes"
|
||||||
|
QMAKE_TARGET_COPYRIGHT = "Andrzej Wojtowicz, Adam Mickiewicz University in Poznan"
|
||||||
|
QMAKE_TARGET_PRODUCT = "Qt SQL Example"
|
||||||
|
|
||||||
|
QT += core gui sql widgets
|
||||||
|
|
||||||
|
TARGET = qt-sql-example
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
SOURCES += src/main.cpp\
|
||||||
|
src/mainwindow.cpp \
|
||||||
|
src/db_controller.cpp
|
||||||
|
|
||||||
|
HEADERS += src/mainwindow.h \
|
||||||
|
src/db_controller.h
|
||||||
|
|
||||||
|
FORMS += src/mainwindow.ui
|
||||||
|
|
||||||
|
RESOURCES += res/icons.qrc
|
||||||
|
|
||||||
|
win32:RC_ICONS += res/database.ico
|
BIN
res/database.ico
Normal file
BIN
res/database.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 110 KiB |
BIN
res/failure.ico
Normal file
BIN
res/failure.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 97 KiB |
7
res/icons.qrc
Normal file
7
res/icons.qrc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/icons">
|
||||||
|
<file>database.ico</file>
|
||||||
|
<file>failure.ico</file>
|
||||||
|
<file>success.ico</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
5
res/readme.txt
Normal file
5
res/readme.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
database.ico:
|
||||||
|
- author: http://barrymieny.deviantart.com
|
||||||
|
- license: Creative Commons Attribution Non-commercial Share Alike (by-nc-sa)
|
||||||
|
success.ico & failure.ico
|
||||||
|
- author: https://www.iconfinder.com/iconpack
|
BIN
res/success.ico
Normal file
BIN
res/success.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 97 KiB |
BIN
screenshot.png
Normal file
BIN
screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
139
src/db_controller.cpp
Normal file
139
src/db_controller.cpp
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
#include "db_controller.h"
|
||||||
|
|
||||||
|
DbController::DbController(QObject* parent) :
|
||||||
|
QObject(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
DbController::~DbController()
|
||||||
|
{
|
||||||
|
if (db.isOpen())
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbController::connectToServerRequested(QString engine, QString driver, QString server, int port, QString database,
|
||||||
|
QString login, QString password, bool is_sql_authentication)
|
||||||
|
{
|
||||||
|
db = QSqlDatabase();
|
||||||
|
db.removeDatabase("example-connection"); // remove old connection if exists
|
||||||
|
|
||||||
|
if (engine == "mysql")
|
||||||
|
{
|
||||||
|
db = QSqlDatabase::addDatabase("QMYSQL", "example-connection");
|
||||||
|
}
|
||||||
|
else if (engine == "mssql")
|
||||||
|
{
|
||||||
|
db = QSqlDatabase::addDatabase("QODBC", "example-connection");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
emit serverErrorWithConnection("Unknown database engine");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool connection_succesfull;
|
||||||
|
|
||||||
|
if (engine == "mysql")
|
||||||
|
{
|
||||||
|
connection_succesfull = connectToServerMySQL(server, port, database, login, password);
|
||||||
|
}
|
||||||
|
else if (engine == "mssql")
|
||||||
|
{
|
||||||
|
connection_succesfull =
|
||||||
|
(is_sql_authentication ? connectToServerMSSQL(driver, server, port, database, login, password) :
|
||||||
|
connectToServerMSSQL(driver, server, port, database));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
emit serverErrorWithConnection("Unknown database engine");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connection_succesfull)
|
||||||
|
emit serverConnected();
|
||||||
|
else
|
||||||
|
emit serverErrorWithConnection(getLastError().driverText());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbController::disconnectFromServerRequested()
|
||||||
|
{
|
||||||
|
disconnectFromServer();
|
||||||
|
|
||||||
|
emit serverDisconnected();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DbController::checkIfTableExists(QString table)
|
||||||
|
{
|
||||||
|
return db.tables().contains(table);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DbController::checkIfConnected()
|
||||||
|
{
|
||||||
|
return db.isOpen();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbController::selectTableRequested(QString table)
|
||||||
|
{
|
||||||
|
QSqlQueryModel* model = selectTable(table);
|
||||||
|
|
||||||
|
emit tableSelected(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbController::getTablesNamesRequested()
|
||||||
|
{
|
||||||
|
emit gotTablesNames(db.tables());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DbController::connectToServerMSSQL(QString driver, QString server, int port, QString database,
|
||||||
|
QString login, QString password)
|
||||||
|
{
|
||||||
|
db.setDatabaseName(connection_string_sqlauth.arg(driver).arg(server).arg(port).arg(database)
|
||||||
|
.arg(login).arg(password));
|
||||||
|
|
||||||
|
return db.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DbController::connectToServerMSSQL(QString driver, QString server, int port, QString database)
|
||||||
|
{
|
||||||
|
db.setDatabaseName(connection_string_winauth.arg(driver).arg(server).arg(port).arg(database));
|
||||||
|
|
||||||
|
return db.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DbController::connectToServerMySQL(QString server, int port, QString database,
|
||||||
|
QString login, QString password)
|
||||||
|
{
|
||||||
|
db.setHostName(server);
|
||||||
|
db.setPort(port);
|
||||||
|
db.setDatabaseName(database);
|
||||||
|
db.setUserName(login);
|
||||||
|
db.setPassword(password);
|
||||||
|
|
||||||
|
return db.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbController::disconnectFromServer()
|
||||||
|
{
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSqlQueryModel* DbController::selectTable(QString name)
|
||||||
|
{
|
||||||
|
QSqlQueryModel* model = new QSqlQueryModel;
|
||||||
|
|
||||||
|
model->setQuery("SELECT * FROM " + name, db);
|
||||||
|
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSqlError DbController::getLastError()
|
||||||
|
{
|
||||||
|
return db.lastError();
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString DbController::connection_string_sqlauth =
|
||||||
|
QString("DRIVER={%1};SERVER=%2;PORT=%3;DATABASE=%4;UID=%5;PWD=%6");
|
||||||
|
|
||||||
|
const QString DbController::connection_string_winauth =
|
||||||
|
QString("DRIVER={%1};SERVER=%2;PORT=%3;DATABASE=%4");
|
42
src/db_controller.h
Normal file
42
src/db_controller.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#ifndef DB_CONTROLLER_H
|
||||||
|
#define DB_CONTROLLER_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <QtSql>
|
||||||
|
|
||||||
|
class DbController : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit DbController(QObject*);
|
||||||
|
~DbController();
|
||||||
|
bool checkIfTableExists(QString);
|
||||||
|
bool checkIfConnected();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void connectToServerRequested(QString, QString, QString, int, QString, QString, QString, bool);
|
||||||
|
void disconnectFromServerRequested();
|
||||||
|
void selectTableRequested(QString);
|
||||||
|
void getTablesNamesRequested();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void serverConnected();
|
||||||
|
void serverErrorWithConnection(QString);
|
||||||
|
void serverDisconnected();
|
||||||
|
void tableSelected(QSqlQueryModel*);
|
||||||
|
void gotTablesNames(QStringList);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool connectToServerMSSQL(QString, QString, int, QString, QString, QString);
|
||||||
|
bool connectToServerMSSQL(QString, QString, int, QString);
|
||||||
|
bool connectToServerMySQL(QString, int, QString, QString, QString);
|
||||||
|
void disconnectFromServer();
|
||||||
|
QSqlQueryModel* selectTable(QString);
|
||||||
|
QSqlError getLastError();
|
||||||
|
|
||||||
|
QSqlDatabase db;
|
||||||
|
static const QString connection_string_sqlauth;
|
||||||
|
static const QString connection_string_winauth;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DB_CONTROLLER_H
|
21
src/main.cpp
Normal file
21
src/main.cpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#include "db_controller.h"
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
DbController db_controller(0);
|
||||||
|
QThread db_thread;
|
||||||
|
|
||||||
|
db_controller.moveToThread(&db_thread);
|
||||||
|
db_thread.start();
|
||||||
|
|
||||||
|
MainWindow window(0, &db_controller, &db_thread);
|
||||||
|
window.show();
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
288
src/mainwindow.cpp
Normal file
288
src/mainwindow.cpp
Normal file
@ -0,0 +1,288 @@
|
|||||||
|
#include "mainwindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QKeyEvent>
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget* parent, DbController* dbc, QThread* dbt) :
|
||||||
|
QMainWindow(parent),
|
||||||
|
ui(new Ui::MainWindow)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
db_controller = dbc;
|
||||||
|
db_thread = dbt;
|
||||||
|
|
||||||
|
// check Qt SQL drivers
|
||||||
|
|
||||||
|
QStringList sql_drivers = QSqlDatabase::drivers();
|
||||||
|
ui->label_qmysql_icon->setPixmap(
|
||||||
|
QPixmap(":/icons/" + QString(sql_drivers.contains("QMYSQL") ? "success" : "failure") + ".ico"));
|
||||||
|
ui->label_qodbc_icon->setPixmap(
|
||||||
|
QPixmap(":/icons/" + QString(sql_drivers.contains("QODBC") ? "success" : "failure") + ".ico"));
|
||||||
|
|
||||||
|
ui->radio_mysql->setEnabled(sql_drivers.contains("QMYSQL"));
|
||||||
|
ui->radio_mssql->setEnabled(sql_drivers.contains("QODBC"));
|
||||||
|
|
||||||
|
if (!sql_drivers.contains("QMYSQL") && !sql_drivers.contains("QODBC"))
|
||||||
|
ui->groupBox_sql_connect->setEnabled(false);
|
||||||
|
|
||||||
|
// connect signals with slots
|
||||||
|
|
||||||
|
// ui => ui
|
||||||
|
|
||||||
|
connect(ui->button_connect, SIGNAL(clicked()), this, SLOT(connectToServerRequested()));
|
||||||
|
connect(ui->radio_mssql, SIGNAL(clicked()), this, SLOT(engineChanged()));
|
||||||
|
connect(ui->radio_mysql, SIGNAL(clicked()), this, SLOT(engineChanged()));
|
||||||
|
connect(ui->radio_sql_authentication, SIGNAL(clicked()), this, SLOT(authenticationMethodChanged()));
|
||||||
|
connect(ui->radio_windows_authentication, SIGNAL(clicked()), this, SLOT(authenticationMethodChanged()));
|
||||||
|
connect(ui->button_show_table, SIGNAL(clicked()), this, SLOT(showTableRequested()));
|
||||||
|
|
||||||
|
// ui => db_controller
|
||||||
|
|
||||||
|
connect(this, SIGNAL(connectToServer(QString,QString,QString,int,QString,QString,QString,bool)),
|
||||||
|
db_controller, SLOT(connectToServerRequested(QString,QString,QString,int,QString,QString,QString,bool)));
|
||||||
|
connect(this, SIGNAL(disconnectFromServer()), db_controller, SLOT(disconnectFromServerRequested()));
|
||||||
|
connect(this, SIGNAL(selectTable(QString)), db_controller, SLOT(selectTableRequested(QString)));
|
||||||
|
connect(this, SIGNAL(getTablesNames()), db_controller, SLOT(getTablesNamesRequested()));
|
||||||
|
|
||||||
|
// db_controller => ui
|
||||||
|
|
||||||
|
connect(db_controller, SIGNAL(serverConnected()), this, SLOT(serverConnected()));
|
||||||
|
connect(db_controller, SIGNAL(serverErrorWithConnection(QString)),
|
||||||
|
this, SLOT(serverErrorWithConnection(QString)));
|
||||||
|
connect(db_controller, SIGNAL(serverDisconnected()), this, SLOT(serverDisconnected()));
|
||||||
|
connect(db_controller, SIGNAL(tableSelected(QSqlQueryModel*)), this, SLOT(displayTable(QSqlQueryModel*)));
|
||||||
|
connect(db_controller, SIGNAL(gotTablesNames(QStringList)), this, SLOT(fillTablesNames(QStringList)));
|
||||||
|
|
||||||
|
// load settings
|
||||||
|
|
||||||
|
QString inifile("config.ini");
|
||||||
|
QFileInfo check_file(inifile);
|
||||||
|
if (check_file.exists() && check_file.isFile())
|
||||||
|
{
|
||||||
|
QSettings settings(inifile, QSettings::Format::IniFormat);
|
||||||
|
|
||||||
|
QString engine = settings.value("sql/engine", "").toString();
|
||||||
|
if (engine == "mysql")
|
||||||
|
{
|
||||||
|
ui->radio_mysql->setChecked(true);
|
||||||
|
ui->radio_windows_authentication->setEnabled(false);
|
||||||
|
ui->lineEdit_driver->setEnabled(false);
|
||||||
|
}
|
||||||
|
else if (engine == "mssql")
|
||||||
|
{
|
||||||
|
ui->radio_mssql->setChecked(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->lineEdit_driver->setText(settings.value("sql/driver", "").toString());
|
||||||
|
ui->lineEdit_server_address->setText(settings.value("sql/address", "").toString());
|
||||||
|
ui->spinBox_server_port->setValue(settings.value("sql/port", 0).toInt());
|
||||||
|
QString auth = settings.value("sql/authentication", "").toString();
|
||||||
|
ui->radio_sql_authentication->setChecked(auth == "server" && (engine == "mssql" || engine == "mysql"));
|
||||||
|
ui->radio_windows_authentication->setChecked(auth == "windows" && engine == "mssql");
|
||||||
|
ui->lineEdit_login->setText(settings.value("sql/login", "").toString());
|
||||||
|
ui->lineEdit_password->setText(settings.value("sql/password", "").toString()); // plain text, so secure...
|
||||||
|
ui->lineEdit_database_name->setText(settings.value("sql/database", "").toString());
|
||||||
|
|
||||||
|
ui->statusBar->showMessage("Settings file config.ini loaded", 3000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->statusBar->showMessage("Settings file config.ini does not exist", 5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
db_thread->exit();
|
||||||
|
db_thread->wait();
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::connectToServerRequested()
|
||||||
|
{
|
||||||
|
QString engine;
|
||||||
|
if (ui->radio_mysql->isChecked())
|
||||||
|
engine = "mysql";
|
||||||
|
else if (ui->radio_mssql->isChecked())
|
||||||
|
engine = "mssql";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox::information(this,
|
||||||
|
"Invalid Engine",
|
||||||
|
"Choose database engine",
|
||||||
|
QMessageBox::Ok);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString driver = ui->lineEdit_driver->text(),
|
||||||
|
server = ui->lineEdit_server_address->text(),
|
||||||
|
database = ui->lineEdit_database_name->text(),
|
||||||
|
login = ui->lineEdit_login->text(),
|
||||||
|
password = ui->lineEdit_password->text();
|
||||||
|
int port = ui->spinBox_server_port->value();
|
||||||
|
|
||||||
|
if (server == "")
|
||||||
|
{
|
||||||
|
QMessageBox::information(this,
|
||||||
|
"Invalid Connection Data",
|
||||||
|
"Insert server address to connect",
|
||||||
|
QMessageBox::Ok);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_sql_authentication = ui->radio_sql_authentication->isChecked();
|
||||||
|
|
||||||
|
if (is_sql_authentication && login == "")
|
||||||
|
{
|
||||||
|
QMessageBox::information(this,
|
||||||
|
"Invalid Connection Data",
|
||||||
|
"Insert login to connect",
|
||||||
|
QMessageBox::Ok);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (database == "")
|
||||||
|
{
|
||||||
|
QMessageBox::information(this,
|
||||||
|
"Invalid Connection Data",
|
||||||
|
"Insert database name to connect",
|
||||||
|
QMessageBox::Ok);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->button_connect->setEnabled(false);
|
||||||
|
ui->statusBar->showMessage("Connecting...");
|
||||||
|
|
||||||
|
emit connectToServer(engine, driver, server, port, database, login, password, is_sql_authentication);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::disconnectFromServerRequested()
|
||||||
|
{
|
||||||
|
ui->button_connect->setEnabled(false);
|
||||||
|
|
||||||
|
emit disconnectFromServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::authenticationMethodChanged()
|
||||||
|
{
|
||||||
|
bool is_sql_authentication = ui->radio_sql_authentication->isChecked();
|
||||||
|
|
||||||
|
ui->lineEdit_login->setEnabled(is_sql_authentication);
|
||||||
|
ui->lineEdit_password->setEnabled(is_sql_authentication);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::engineChanged()
|
||||||
|
{
|
||||||
|
bool is_mssql_engine = ui->radio_mssql->isChecked();
|
||||||
|
|
||||||
|
ui->lineEdit_driver->setEnabled(is_mssql_engine);
|
||||||
|
ui->radio_windows_authentication->setEnabled(is_mssql_engine);
|
||||||
|
|
||||||
|
ui->spinBox_server_port->setValue(is_mssql_engine ? 1433 : 3306);
|
||||||
|
|
||||||
|
if (!is_mssql_engine)
|
||||||
|
{
|
||||||
|
ui->radio_sql_authentication->setChecked(true);
|
||||||
|
emit authenticationMethodChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::showTableRequested()
|
||||||
|
{
|
||||||
|
ui->button_show_table->setEnabled(false);
|
||||||
|
|
||||||
|
QString table_name = ui->comboBox_table_name->currentText();
|
||||||
|
|
||||||
|
emit selectTable(table_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::serverConnected()
|
||||||
|
{
|
||||||
|
ui->button_connect->setEnabled(true);
|
||||||
|
|
||||||
|
disconnect(ui->button_connect, SIGNAL(clicked()), this, SLOT(connectToServerRequested()));
|
||||||
|
connect(ui->button_connect, SIGNAL(clicked()), this, SLOT(disconnectFromServerRequested()));
|
||||||
|
|
||||||
|
ui->button_connect->setText("Disconnect");
|
||||||
|
ui->groupBox_database_browser->setEnabled(true);
|
||||||
|
|
||||||
|
ui->statusBar->showMessage("Connected", 3000);
|
||||||
|
|
||||||
|
emit getTablesNames();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::fillTablesNames(QStringList tables_names)
|
||||||
|
{
|
||||||
|
if (tables_names.length() == 0)
|
||||||
|
QMessageBox::warning(this,
|
||||||
|
"Tables",
|
||||||
|
"There are no tables to display in the database",
|
||||||
|
QMessageBox::Ok);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->comboBox_table_name->addItems(tables_names);
|
||||||
|
|
||||||
|
ui->comboBox_table_name->setEnabled(true);
|
||||||
|
ui->comboBox_table_name->setFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::serverErrorWithConnection(QString message)
|
||||||
|
{
|
||||||
|
QMessageBox::critical(this,
|
||||||
|
"Connection failed",
|
||||||
|
message,
|
||||||
|
QMessageBox::Ok);
|
||||||
|
|
||||||
|
ui->button_connect->setEnabled(true);
|
||||||
|
|
||||||
|
ui->statusBar->showMessage("Connection failed", 3000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::serverDisconnected()
|
||||||
|
{
|
||||||
|
disconnect(ui->button_connect, SIGNAL(clicked()), this, SLOT(disconnectFromServerRequested()));
|
||||||
|
connect(ui->button_connect, SIGNAL(clicked()), this, SLOT(connectToServerRequested()));
|
||||||
|
|
||||||
|
ui->tableView_database_table->setModel(NULL);
|
||||||
|
|
||||||
|
ui->button_connect->setEnabled(true);
|
||||||
|
ui->button_connect->setText("Connect");
|
||||||
|
|
||||||
|
ui->comboBox_table_name->clear();
|
||||||
|
ui->comboBox_table_name->setEnabled(false);
|
||||||
|
|
||||||
|
ui->groupBox_database_browser->setEnabled(false);
|
||||||
|
ui->button_connect->setFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::displayTable(QSqlQueryModel* model)
|
||||||
|
{
|
||||||
|
if (!model->lastError().isValid())
|
||||||
|
ui->tableView_database_table->setModel(model);
|
||||||
|
else
|
||||||
|
QMessageBox::critical(this,
|
||||||
|
"Select failed",
|
||||||
|
model->lastError().databaseText(),
|
||||||
|
QMessageBox::Ok);
|
||||||
|
|
||||||
|
ui->button_show_table->setEnabled(true);
|
||||||
|
ui->comboBox_table_name->setFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::keyPressEvent(QKeyEvent* pe)
|
||||||
|
{
|
||||||
|
if (pe->key() == Qt::Key_Enter || pe->key() == Qt::Key_Return)
|
||||||
|
{
|
||||||
|
if (!db_controller->checkIfConnected())
|
||||||
|
emit connectToServerRequested();
|
||||||
|
else if (ui->comboBox_table_name->isEnabled() && ui->comboBox_table_name->hasFocus())
|
||||||
|
emit showTableRequested();
|
||||||
|
}
|
||||||
|
}
|
49
src/mainwindow.h
Normal file
49
src/mainwindow.h
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include "db_controller.h"
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
|
||||||
|
namespace Ui
|
||||||
|
{
|
||||||
|
class MainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit MainWindow(QWidget* parent, DbController* dbc, QThread* dbt);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void connectToServerRequested();
|
||||||
|
void disconnectFromServerRequested();
|
||||||
|
void engineChanged();
|
||||||
|
void authenticationMethodChanged();
|
||||||
|
void showTableRequested();
|
||||||
|
|
||||||
|
void serverConnected();
|
||||||
|
void serverErrorWithConnection(QString);
|
||||||
|
void serverDisconnected();
|
||||||
|
void displayTable(QSqlQueryModel*);
|
||||||
|
void fillTablesNames(QStringList);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void connectToServer(QString, QString, QString, int, QString, QString, QString, bool);
|
||||||
|
void disconnectFromServer();
|
||||||
|
void selectTable(QString);
|
||||||
|
void getTablesNames();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::MainWindow* ui;
|
||||||
|
DbController* db_controller;
|
||||||
|
QThread* db_thread;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void keyPressEvent(QKeyEvent*);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAINWINDOW_H
|
556
src/mainwindow.ui
Normal file
556
src/mainwindow.ui
Normal file
@ -0,0 +1,556 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>690</width>
|
||||||
|
<height>483</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>690</width>
|
||||||
|
<height>483</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Qt SQL Example</string>
|
||||||
|
</property>
|
||||||
|
<property name="windowIcon">
|
||||||
|
<iconset resource="../res/icons.qrc">
|
||||||
|
<normaloff>:/icons/database.ico</normaloff>:/icons/database.ico</iconset>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralWidget">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_sql_drivers">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>250</width>
|
||||||
|
<height>45</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Qt SQL database drivers</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" name="label_qmysql_icon">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>53</x>
|
||||||
|
<y>23</y>
|
||||||
|
<width>13</width>
|
||||||
|
<height>13</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../res/icons.qrc">:/icons/failure.ico</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_qodbc_icon">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>143</x>
|
||||||
|
<y>23</y>
|
||||||
|
<width>13</width>
|
||||||
|
<height>13</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../res/icons.qrc">:/icons/failure.ico</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>73</x>
|
||||||
|
<y>22</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>13</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>QMYSQL</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>163</x>
|
||||||
|
<y>22</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>13</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>QODBC</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_sql_connect">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>250</width>
|
||||||
|
<height>390</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Connect to server</string>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QGroupBox" name="groupBox_authentication">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>175</y>
|
||||||
|
<width>231</width>
|
||||||
|
<height>141</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Authentication</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_login">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>90</x>
|
||||||
|
<y>54</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="radio_sql_authentication">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>24</y>
|
||||||
|
<width>151</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>SQL Server authentication</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="radio_windows_authentication">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>114</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Windows authentication</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_password">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>90</x>
|
||||||
|
<y>84</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="echoMode">
|
||||||
|
<enum>QLineEdit::Password</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>54</y>
|
||||||
|
<width>51</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>login:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>84</y>
|
||||||
|
<width>61</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>password:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<zorder>lineEdit_login</zorder>
|
||||||
|
<zorder>radio_sql_authentication</zorder>
|
||||||
|
<zorder>radio_windows_authentication</zorder>
|
||||||
|
<zorder>lineEdit_password</zorder>
|
||||||
|
<zorder>label</zorder>
|
||||||
|
<zorder>label_2</zorder>
|
||||||
|
<zorder>groupBox_sql_drivers</zorder>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="button_connect">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>88</x>
|
||||||
|
<y>356</y>
|
||||||
|
<width>75</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Connect</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoDefault">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>115</y>
|
||||||
|
<width>41</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>server:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_server_address">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>100</x>
|
||||||
|
<y>115</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_database_name">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>100</x>
|
||||||
|
<y>326</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>326</y>
|
||||||
|
<width>81</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>database name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>145</y>
|
||||||
|
<width>51</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>port:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QSpinBox" name="spinBox_server_port">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>100</x>
|
||||||
|
<y>145</y>
|
||||||
|
<width>61</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Default: MySQL 3306; MSSQL 1433</string>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>65535</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>85</y>
|
||||||
|
<width>41</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>driver:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_driver">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>100</x>
|
||||||
|
<y>85</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>For ODBC/MSSQL: "SQL Server" (Windows), "ODBC Driver 13 for SQL Server", "FreeTDS" (unix), etc.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QGroupBox" name="groupBox_engine">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>231</width>
|
||||||
|
<height>51</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Engine</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QRadioButton" name="radio_mssql">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>135</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>82</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>MSSQL</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="radio_mysql">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>45</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>82</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>MySQL</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_database_browser">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>300</width>
|
||||||
|
<height>300</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Database browser</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="comboBox_table_name">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>130</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="sizeIncrement">
|
||||||
|
<size>
|
||||||
|
<width>130</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QPushButton" name="button_show_table">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoDefault">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>table:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="4">
|
||||||
|
<widget class="QTableView" name="tableView_database_table"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusBar"/>
|
||||||
|
</widget>
|
||||||
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>radio_mysql</tabstop>
|
||||||
|
<tabstop>radio_mssql</tabstop>
|
||||||
|
<tabstop>lineEdit_driver</tabstop>
|
||||||
|
<tabstop>lineEdit_server_address</tabstop>
|
||||||
|
<tabstop>spinBox_server_port</tabstop>
|
||||||
|
<tabstop>radio_sql_authentication</tabstop>
|
||||||
|
<tabstop>lineEdit_login</tabstop>
|
||||||
|
<tabstop>lineEdit_password</tabstop>
|
||||||
|
<tabstop>radio_windows_authentication</tabstop>
|
||||||
|
<tabstop>lineEdit_database_name</tabstop>
|
||||||
|
<tabstop>button_connect</tabstop>
|
||||||
|
<tabstop>comboBox_table_name</tabstop>
|
||||||
|
<tabstop>button_show_table</tabstop>
|
||||||
|
<tabstop>tableView_database_table</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<resources>
|
||||||
|
<include location="../res/icons.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
Loading…
Reference in New Issue
Block a user