Credentials_manager/PasswordManager/mainwindow.cpp
2021-12-25 03:54:38 +03:00

274 lines
8.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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();
}