274 lines
8.5 KiB
C++
274 lines
8.5 KiB
C++
#include "mainwindow.h"
|
||
#include "./ui_mainwindow.h"
|
||
#include "manager.h"
|
||
#include <iostream>
|
||
#include <QFileDialog>
|
||
#include <QString>
|
||
#include <QDateTime>
|
||
#include <QtSql>
|
||
#include <QFileDialog>
|
||
#include<QFile>
|
||
|
||
|
||
const QString MainWindow::fileDialogFilterString = tr("SQLite Database Files (*.sqlite3 *.sqlite *.db *.db3 *.sl3 *.s3db *.sdb *.sqlite2 *.db2 *.sl2 *.s2db)");
|
||
|
||
MainWindow::MainWindow(QWidget *parent)
|
||
: QMainWindow(parent)
|
||
, ui(new Ui::MainWindow)
|
||
{
|
||
ui->setupUi(this);
|
||
// this->setFixedSize(1080,760);
|
||
// manager = new Manager();
|
||
dial = new AddDialog();
|
||
connect(dial,SIGNAL(sendText(Record*)),this,SLOT(addRecordSlot(Record*)));
|
||
createModel();
|
||
ui->tableViewRecords->setEnabled(true);
|
||
ui->tableViewRecords->setVisible(true);
|
||
}
|
||
|
||
Ui::MainWindow* MainWindow::getUI()
|
||
{
|
||
return ui;
|
||
}
|
||
|
||
void MainWindow::createModel()
|
||
{
|
||
model = new QSqlTableModel(this, m_db); // создание редактируемой модели базы данных.
|
||
|
||
model->setTable("records"); // создание модели таблицы records.
|
||
model->select(); // заполнение модели данными.
|
||
|
||
// Выбор стратегии сохранения изменений в базе данных:
|
||
model->setEditStrategy(QSqlTableModel::OnFieldChange); // сохранение происходит при переходе к другому полю.
|
||
|
||
ui->tableViewRecords->setModel(model); // соединение модели и ее табличного представления в форме.
|
||
|
||
model->setHeaderData(0, Qt::Horizontal, tr("name"));
|
||
model->setHeaderData(1, Qt::Horizontal, tr("username"));
|
||
model->setHeaderData(2, Qt::Horizontal, tr("password"));
|
||
model->setHeaderData(3, Qt::Horizontal, tr("url"));
|
||
model->setHeaderData(4, Qt::Horizontal, tr("note"));
|
||
model->setHeaderData(5, Qt::Horizontal, tr("time"));
|
||
|
||
}
|
||
void MainWindow::initAppWithDatabaseFile(const QString &dbFileFullPath) {
|
||
qDebug() << "dbFileFullPath=" << dbFileFullPath;
|
||
if (dbFileFullPath.isEmpty()) return;
|
||
connectToDatabase(dbFileFullPath);
|
||
createModel();
|
||
// setUserInterfaceEnabled(true);
|
||
}
|
||
void MainWindow::putRecord(Record* record){
|
||
query->clear();
|
||
qDebug() << "query->clear();";
|
||
query->prepare("SELECT MAX(r.id) AS 'number_of_records' FROM records AS 'r';");
|
||
query->exec();
|
||
// if (!query->isActive())
|
||
// QMessageBox::warning(this, tr("Database Error"), query->lastError().text());
|
||
query->next();
|
||
QString count = QString::number(query->value(0).toInt() + 1);
|
||
// if (id.isEmpty() || lastName.isEmpty() || firstName.isEmpty() || occupation.isEmpty() || yeaOfAdmission.isEmpty())
|
||
// return;
|
||
|
||
query->clear();
|
||
|
||
qDebug() << "Добавление строки:" <<
|
||
query->prepare("INSERT INTO records(id, name, username, password, url, note, time)" \
|
||
"VALUES(:id, :name, :username, :password, :url, :note, :time)");
|
||
// query->prepare("INSERT INTO employees(id, last_name, first_name, occupation, year_of_admission) " \
|
||
// "VALUES(:id, :last_name, :first_name, :occupation, :year_of_admission)");
|
||
query->bindValue(":id", record->getId());
|
||
query->bindValue(":name", record->getName());
|
||
query->bindValue(":username", record->getUsername());
|
||
query->bindValue(":password", record->getPassword());
|
||
query->bindValue(":url", record->getURL());
|
||
query->bindValue(":note", record->getNote());
|
||
query->bindValue(":time", record->getTime());
|
||
query->exec();
|
||
}
|
||
void MainWindow::updateRecord(){}
|
||
void MainWindow::deleteRecord()
|
||
{
|
||
// if (ui->spinBoxID->text().isEmpty())
|
||
// return;
|
||
QString id = "zzz";
|
||
// QString id = ui->spinBoxID->text();
|
||
|
||
query->clear();
|
||
|
||
qDebug() << "Удаление строки:" <<
|
||
query->exec(QString("DELETE FROM recordsn3ox WHERE id = %1;").arg(id));
|
||
|
||
// model->select(); // наполнить модель данными из таблицы, учитывая условия фильтрации и сортировки.
|
||
}
|
||
|
||
|
||
void MainWindow::connectToDatabase(const QString &dbName)
|
||
{
|
||
m_db = QSqlDatabase::addDatabase("QSQLITE"); // соединение объекта базы данных с СУБД.
|
||
//m_db.setDatabaseName(dbName); // определение имени базы данных.
|
||
m_db.setDatabaseName("my_db.sqlite"); // определение имени базы данных.
|
||
|
||
if (!m_db.open()) // проверка на ошибку при открытии или создании базы данных.
|
||
throw "Can't open database!";
|
||
query = new QSqlQuery(m_db); // создание объекта для запроса.
|
||
if (!m_db.tables().contains("records")) // если в базе не существует таблица records
|
||
{ // то создание таблицы records:
|
||
|
||
qDebug() << "В базе не существует таблица records!";
|
||
|
||
query->clear(); // очистка запроса.
|
||
// id
|
||
// name
|
||
// username
|
||
// URL
|
||
// Note
|
||
// Time
|
||
qDebug() << "Создание таблицы records:" <<
|
||
query->exec("CREATE TABLE records(" \
|
||
" id TEXT PRIMARY KEY NOT NULL, /* идентификатор */" \
|
||
" name TEXT, /* имя */" \
|
||
" username TEXT, /* имя пользователя */" \
|
||
" password TEXT, /* пароль */" \
|
||
" url TEXT, /* web url */" \
|
||
" note TEXT, /* примечания */" \
|
||
" time INTEGER /* дата добавления */" \
|
||
");"); // исполнение запроса на добавление записи.
|
||
|
||
}
|
||
}
|
||
|
||
|
||
// Метод показывающий диалоговое окно для выбора файла для новой базы данных:
|
||
void MainWindow::on_actionCreateNewDatabase_triggered()
|
||
{
|
||
std::cout << "clicked" << std::endl;
|
||
QString dbFileFullPath = QFileDialog::getSaveFileName(this, tr("Save SQLite Database File"), "", MainWindow::fileDialogFilterString);
|
||
initAppWithDatabaseFile(dbFileFullPath);
|
||
model->select();
|
||
}
|
||
|
||
// Метод показывающий диалоговое окно для выбора файла для открытия созданной ранее базы данных:
|
||
void MainWindow::on_actionOpenDatabase_triggered()
|
||
{
|
||
QString dbFileFullPath = QFileDialog::getOpenFileName(this, tr("Open SQLite Database File"), "", MainWindow::fileDialogFilterString);
|
||
initAppWithDatabaseFile(dbFileFullPath);
|
||
model->select();
|
||
|
||
}
|
||
|
||
//void MainWindow::initAppWithDatabaseFile(const QString &dbFileFullPath) {
|
||
// qDebug() << "dbFileFullPath=" << dbFileFullPath;
|
||
// //qDebug() << QSqlDatabase::drivers();
|
||
|
||
// if (dbFileFullPath.isEmpty()) return;
|
||
//}
|
||
|
||
|
||
void MainWindow::on_addButton_clicked()
|
||
{
|
||
|
||
|
||
|
||
// QSizeGrip(dial.ui.hSp);
|
||
dial->show();
|
||
// Record record = dial.getRecord();
|
||
// std::cout << record.toStdString();
|
||
|
||
//Record* record = new Record("name", "username", "password", "url", "note", *time);
|
||
std::cout << "add" << std::endl;
|
||
// manager->putRecord(&record);
|
||
|
||
|
||
}
|
||
|
||
MainWindow::~MainWindow()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
|
||
|
||
void MainWindow::on_pushButton_clicked()
|
||
{
|
||
genpass.show();
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
void MainWindow::on_tableView_activated(const QModelIndex &index)
|
||
{
|
||
|
||
}
|
||
|
||
|
||
void MainWindow::on_deleteButton_clicked()
|
||
{
|
||
del.show();
|
||
}
|
||
|
||
|
||
void MainWindow::on_pushButton_5_clicked()
|
||
{
|
||
ui->stackedWidget->setCurrentIndex(0);
|
||
}
|
||
|
||
|
||
void MainWindow::on_editButton_clicked()
|
||
{
|
||
ui->stackedWidget->setCurrentIndex(2);
|
||
}
|
||
|
||
|
||
void MainWindow::on_pushButton_7_clicked()
|
||
{
|
||
ui->stackedWidget->setCurrentIndex(0);
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
void MainWindow::on_pushButton_9_clicked()
|
||
{
|
||
|
||
qApp->setStyleSheet("QWidget{background-color: #202020;color: #fff;selection-background-color: #ff732d; selection-color: #000;}");
|
||
|
||
|
||
}
|
||
|
||
|
||
void MainWindow::on_action_7_triggered()
|
||
{
|
||
std::cout << "about" << std::endl;
|
||
about.show();
|
||
|
||
|
||
}
|
||
|
||
|
||
void MainWindow::on_pushButton_2_clicked()
|
||
{
|
||
|
||
}
|
||
void MainWindow::on_actionExit_triggered()
|
||
{
|
||
QCoreApplication::quit();
|
||
|
||
}
|
||
void MainWindow::on_actionblakc_triggered()
|
||
{
|
||
|
||
}
|
||
|
||
void MainWindow::addRecordSlot(Record *r)
|
||
{
|
||
putRecord(r);
|
||
model->select();
|
||
}
|
||
|
||
|