#include "mainwindow.h" #include "./ui_mainwindow.h" #include "manager.h" #include #include #include #include #include #include #include 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(); }