From 8bc21103f6aaf6a6de4e68845cf459ff36d5c428 Mon Sep 17 00:00:00 2001 From: Thomas resiX Date: Sat, 15 Feb 2025 08:35:11 +0100 Subject: [PATCH] 2.0 --- Video-Datenbank.ico | Bin 0 -> 80400 bytes Video-Datenbank.pro | 29 +++ Video-Datenbank.qrc | 5 + main.cpp | 10 + mainwindow.cpp | 487 ++++++++++++++++++++++++++++++++++++++++++++ mainwindow.h | 61 ++++++ mainwindow.ui | 373 +++++++++++++++++++++++++++++++++ 7 files changed, 965 insertions(+) create mode 100644 Video-Datenbank.ico create mode 100644 Video-Datenbank.pro create mode 100644 Video-Datenbank.qrc create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 mainwindow.ui diff --git a/Video-Datenbank.ico b/Video-Datenbank.ico new file mode 100644 index 0000000000000000000000000000000000000000..e587c06ae53f4aab68acd0fb2d57d07de43199f6 GIT binary patch literal 80400 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 + + Video-Datenbank.ico + + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..493ec7f --- /dev/null +++ b/main.cpp @@ -0,0 +1,10 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]){ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..0c828f2 --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,487 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + Debug = 0; +if(Debug) qDebug() << "MainWindow"; + ui->setupUi(this); + + fileName = "Video-Datenbank.db"; + oeffneDatenbank(); + + /*qApp->setStyleSheet("QWidget { color: #0c4909; \ + background-color: #aaffaa; \ + selection-color: #ffffff; \ + selection-background-color: #002500; }");*/ + + ui->pushButton_pfad->setStyleSheet("text-align:left;"); + ui->comboBox_bildformat->addItems({"", "16:9", "4:3"}); + ui->comboBox_filmtyp->addItems({"", "Film", "Serie"}); + ui->comboBox_genre->addItems({"", "Abenteuer", "Action", "Alien", "Animation", "Boxerfilm", "Computer", "Drama", "Dystopie", "Endzeit", "Erotik", "Fantasy", "Horror", "Karate", "Katastrophen", "Komödie", "Krieg", "Krimi", "Märchen", "Mittelalter", "Monster", "Musik", "Parodie", "Piraten", "Psycho", "Religion", "Science-Fiction", "SuperHelden", "Szene", "Tanzfilm", "Thriller", "Vampir", "Weltraum", "Werwolf", "Western", "Zombie"}); + ui->comboBox_fsk->addItems({"", "0", "6", "12", "16", "18"}); + + ui->lineEdit_suchen->setText(""); + on_lineEdit_suchen_textChanged(); +if(Debug) qDebug() << "MainWindow-Ende"; +} + +void MainWindow::oeffneDatenbank(){ +if(Debug) qDebug() << "oeffneDatenbank"; + ui->tableWidget_Datenbank_ausgabe->clear(); + + QDateTime now = QDateTime::currentDateTime(); + QString newName = "Video-Datenbank-Backup-" + now.toString("yyyy.MM.dd-hh.mm.ss") + ".db"; + QFile file(fileName); + file.copy(newName); + + db = QSqlDatabase::addDatabase("QSQLITE"); + //db.setConnectOptions("QSQLITE_ENABLE_REGEXP"); + db.setDatabaseName("Video-Datenbank.db"); + + if(db.open()){ + ui->statusbar->showMessage("Datenbank Video-Datenbank.db geöffnet!"); + } else{ + ui->statusbar->showMessage("Datenbank Video-Datenbank.db nicht geöffnet!"); + return; + } + + query = QSqlQuery(db); + + query.exec("CREATE TABLE IF NOT EXISTS einstellungen(" + "pfad TEXT)"); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + + query.exec("SELECT pfad FROM einstellungen"); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + while(query.next()){ + datenPfad = query.value(0).toString(); + } + if(datenPfad == "" || datenPfad == "/"){ + datenPfad = "c:/"; + } + setWindowTitle("Video-Datenbank - Datenquelle: " + datenPfad); + + query.exec("CREATE TABLE IF NOT EXISTS video(" + "id INTEGER PRIMARY KEY, " + "pfad TEXT, " + "Titel TEXT, " + "Bildformat TEXT, " + "Filmtyp TEXT, " + "Teil TEXT, " + "Genre TEST, " + "Länge TEXT, " + "Jahr TEXT, " + "FSK TEXT, " + "Handlung TEXT, " + "Bild BLOB)"); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } +if(Debug) qDebug() << "oeffneDatenbank-Ende"; +} + +void MainWindow::schiesseDatenbank(){ +if(Debug) qDebug() << "schiesseDatenbank"; + db.close(); +if(Debug) qDebug() << "schiesseDatenbank-Ende"; +} + +void MainWindow::leseVerzeichnis(){ +if(Debug) qDebug() << "leseVerzeichnis"; + ui->tableWidget_Datenbank_ausgabe->clear(); + + QDirIterator it(datenPfad, QStringList() << "*.3gp" << "*.avi" << "*.divx" << "*.flv" << "*.m2ts" << "*.mpeg" << "*.mts" << "*.mkv" << "*.mov" << "*.mp4" << "*.mpg" << "*.ogv" << "*.qt" << "*.webm" << "*.wmv", QDir::Files, QDirIterator::Subdirectories); + while(it.hasNext()){ + QString pfad = it.next(); + pfad.replace(QString("'"), QString("''")); + + ui->statusbar->showMessage(pfad); + ui->statusbar->repaint(); + + query.exec(QString("SELECT * FROM video WHERE pfad == '%1'").arg(pfad)); + if(!query.next()){ + query.exec(QString("INSERT INTO video (pfad) VALUES('%1')").arg(pfad)); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + } + } + ui->statusbar->showMessage("Daten eingelesen!"); + + ui->lineEdit_suchen->setText(""); + on_lineEdit_suchen_textChanged(); +if(Debug) qDebug() << "leseVerzeichnis-Ende"; +} + +MainWindow::~MainWindow(){ +if(Debug) qDebug() << "~MainWindow"; + schiesseDatenbank(); + delete ui; +if(Debug) qDebug() << "~MainWindow-Ende"; +} + +void MainWindow::on_actionDaten_aktualisieren_triggered(){ +if(Debug) qDebug() << "on_actionDaten_aktualisieren_triggered"; + leseVerzeichnis(); +if(Debug) qDebug() << "on_actionDaten_aktualisieren_triggered-Ende"; +} + + +void MainWindow::on_actionDaten_ausgeben_triggered(){ +if(Debug) qDebug() << "on_actionDaten_ausgeben_triggered"; + ui->lineEdit_suchen->setText(""); + on_lineEdit_suchen_textChanged(); + ui->statusbar->showMessage("Daten ausgegeben"); +if(Debug) qDebug() << "on_actionDaten_ausgeben_triggered-Ende"; +} + + +void MainWindow::on_actionBeenden_triggered(){ +if(Debug) qDebug() << "on_actionBeenden_triggered"; + MainWindow::close(); +if(Debug) qDebug() << "on_actionBeenden_triggered-Ende"; +} + + +void MainWindow::on_actionPfad_zu_den_Videos_triggered(){ +if(Debug) qDebug() << "on_actionPfad_zu_den_Videos_triggered"; + datenPfad = QFileDialog::getExistingDirectory(this, tr("Öffne Verzeichnis"), datenPfad, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + ui->statusbar->showMessage(datenPfad); + + if(datenPfad!=""){ + ui->tableWidget_Datenbank_ausgabe->clear(); + query.exec(QString("INSERT OR REPLACE INTO einstellungen VALUES ('%1')").arg(datenPfad)); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + } else{ + query.exec("SELECT * FROM einstellungen"); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + while(query.next()){ + datenPfad = query.value(0).toString(); + } + if(datenPfad == "" || datenPfad == "/"){ + datenPfad = "c:/"; + } + } + setWindowTitle("Video-Datenbank - Datenquelle: " + datenPfad); +if(Debug) qDebug() << "on_actionPfad_zu_den_Videos_triggered-Ende"; +} + +void MainWindow::on_pushButton_minus_clicked(){ +if(Debug) qDebug() << "on_pushButton_minus_clicked"; + if(ui->tableWidget_Datenbank_ausgabe->rowCount()<=0) return; + QString Zeile = ui->pushButton_id->text(); + int row = Zeile.toInt(); + row--; + if(row<1) return; + ui->statusbar->showMessage("Datensatz zurück"); + on_tableWidget_Datenbank_ausgabe_cellClicked(row-1, 0); +if(Debug) qDebug() << "on_pushButton_minus_clicked-Ende"; +} + +void MainWindow::on_pushButton_plus_clicked(){ +if(Debug) qDebug() << "on_pushButton_plus_clicked"; + if(ui->tableWidget_Datenbank_ausgabe->rowCount()<=0) return; + QString Zeile = ui->pushButton_id->text(); + QString Zeile_max = ui->pushButton_max->text(); + int row = Zeile.toInt(); + int row_max = Zeile_max.toInt(); + row++; + if(row>row_max) return; + ui->statusbar->showMessage("Datensatz vor"); + on_tableWidget_Datenbank_ausgabe_cellClicked(row-1, 0); +if(Debug) qDebug() << "on_pushButton_plus_clicked-Ende"; +} + +void MainWindow::on_lineEdit_suchen_textChanged(){ +if(Debug) qDebug() << "on_lineEdit_suchen_textChanged"; + + ui->tableWidget_Datenbank_ausgabe->clear(); + + int Zeile_max = 0; + QStringList sucheTabelleZeile; + QVector sucheTabelleIndex; + + QStringList suchenTextList = ui->lineEdit_suchen->text().replace(("$"),("")).replace("'","''").split(" "); + QString befehl_SQL; + QString befehl_SELECT_SQL = "SELECT * FROM video WHERE "; + QString befehl_LIKE_SQL = "(pfad LIKE '%$%' OR Titel LIKE '%$%' OR Bildformat LIKE '%$%' OR Filmtyp LIKE '%$%' OR Teil LIKE '%$%' OR Genre LIKE '%$%' OR Länge LIKE '%$%' OR Jahr LIKE '%$%' OR FSK LIKE '%$%' OR Handlung LIKE '%$%')"; + + for(int i=0; i< suchenTextList.length(); i++){ + if(i<1){ + befehl_SQL = befehl_SELECT_SQL + befehl_LIKE_SQL; + befehl_SQL.replace(QString("$"), QString(suchenTextList.at(i))); + } else{ + befehl_SQL = befehl_SQL + " AND " + befehl_LIKE_SQL; + befehl_SQL.replace(QString("$"), QString(suchenTextList.at(i))); + } + } + + query.exec(befehl_SQL); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Beim suchen ist ein Fehler aufgetreten:" + query.lastError().databaseText()); + } + + while(query.next()){ + sucheTabelleZeile << query.value(1).toString() << query.value(2).toString() << query.value(3).toString() << query.value(4).toString() << query.value(5).toString() << query.value(6).toString() << query.value(7).toString() << query.value(8).toString() << query.value(9).toString(); + sucheTabelleIndex.append(sucheTabelleZeile); + sucheTabelleZeile.clear(); + } + + if(sucheTabelleIndex.length()<=0){ + ui->tableWidget_Datenbank_ausgabe->setColumnCount(0); + ui->tableWidget_Datenbank_ausgabe->setRowCount(0); + return; + } + + for(int i=0; itableWidget_Datenbank_ausgabe->setColumnCount(10); // Table costructor + ui->tableWidget_Datenbank_ausgabe->setHorizontalHeaderLabels({tr("Pfad"), tr("Titel"), tr("Format"), tr("Typ"), tr("Teil"), tr("Genre"), tr("Länge"), tr("Jahr"), tr("FSK"), tr("Status")}); + ui->tableWidget_Datenbank_ausgabe->setRowCount(i+1); // neue Zeile + ui->tableWidget_Datenbank_ausgabe->setItem(i, 0, new QTableWidgetItem (QStringLiteral("%1").arg(sucheTabelleIndex[i][0]))); + ui->tableWidget_Datenbank_ausgabe->setItem(i, 1, new QTableWidgetItem (QStringLiteral("%1").arg(sucheTabelleIndex[i][1]))); + ui->tableWidget_Datenbank_ausgabe->setItem(i, 2, new QTableWidgetItem (QStringLiteral("%1").arg(sucheTabelleIndex[i][2]))); + ui->tableWidget_Datenbank_ausgabe->item(i, 2)->setTextAlignment(Qt::AlignCenter); + ui->tableWidget_Datenbank_ausgabe->setItem(i, 3, new QTableWidgetItem (QStringLiteral("%1").arg(sucheTabelleIndex[i][3]))); + ui->tableWidget_Datenbank_ausgabe->item(i, 3)->setTextAlignment(Qt::AlignCenter); + ui->tableWidget_Datenbank_ausgabe->setItem(i, 4, new QTableWidgetItem (QStringLiteral("%1").arg(sucheTabelleIndex[i][4]))); + ui->tableWidget_Datenbank_ausgabe->item(i, 4)->setTextAlignment(Qt::AlignCenter); + ui->tableWidget_Datenbank_ausgabe->setItem(i, 5, new QTableWidgetItem (QStringLiteral("%1").arg(sucheTabelleIndex[i][5]))); + ui->tableWidget_Datenbank_ausgabe->item(i, 5)->setTextAlignment(Qt::AlignCenter); + ui->tableWidget_Datenbank_ausgabe->setItem(i, 6, new QTableWidgetItem (QStringLiteral("%1").arg(sucheTabelleIndex[i][6]))); + ui->tableWidget_Datenbank_ausgabe->item(i, 6)->setTextAlignment(Qt::AlignCenter); + ui->tableWidget_Datenbank_ausgabe->setItem(i, 7, new QTableWidgetItem (QStringLiteral("%1").arg(sucheTabelleIndex[i][7]))); + ui->tableWidget_Datenbank_ausgabe->item(i, 7)->setTextAlignment(Qt::AlignCenter); + ui->tableWidget_Datenbank_ausgabe->setItem(i, 8, new QTableWidgetItem (QStringLiteral("%1").arg(sucheTabelleIndex[i][8]))); + ui->tableWidget_Datenbank_ausgabe->item(i, 8)->setTextAlignment(Qt::AlignCenter); + if(QFileInfo::exists(sucheTabelleIndex[i][0])){ + ui->tableWidget_Datenbank_ausgabe->setItem(i, 9, new QTableWidgetItem (QStringLiteral("%1").arg("Ok"))); + ui->tableWidget_Datenbank_ausgabe->item(i, 9)->setTextAlignment(Qt::AlignCenter); + ui->tableWidget_Datenbank_ausgabe->item(i, 9)->setBackground(QBrush(QColor("#88ff88"))); + } else{ + ui->tableWidget_Datenbank_ausgabe->setItem(i, 9, new QTableWidgetItem (QStringLiteral("%1").arg("kein Video"))); + ui->tableWidget_Datenbank_ausgabe->item(i, 9)->setTextAlignment(Qt::AlignCenter); + ui->tableWidget_Datenbank_ausgabe->item(i, 9)->setBackground(QBrush(QColor("#ff8888"))); + } + } + ui->pushButton_max->setText(QString::number(Zeile_max)); + ui->tableWidget_Datenbank_ausgabe->resizeColumnsToContents(); + if(ui->tableWidget_Datenbank_ausgabe->rowCount()>0) on_tableWidget_Datenbank_ausgabe_cellClicked(0, 0); + ui->tableWidget_Datenbank_ausgabe->setSortingEnabled(true); + ui->tableWidget_Datenbank_ausgabe->sortByColumn(0, Qt::AscendingOrder); +if(Debug) qDebug() << "on_lineEdit_suchen_textChanged-Ende"; +} + +void MainWindow::on_pushButton_abspielen_clicked(){ +if(Debug) qDebug() << "on_pushButton_abspielen_clicked"; + if(ui->tableWidget_Datenbank_ausgabe->rowCount()<=0) return; + if(QFileInfo::exists(ui->pushButton_pfad->text())){ + QProcess *explorer = new QProcess; + explorer->start("explorer", {ui->pushButton_pfad->text().replace(QString("/"), QString("\\"))}); + } + ui->statusbar->showMessage("Video abspielen"); +if(Debug) qDebug() << "on_pushButton_abspielen_clicked-Ende"; +} + +void MainWindow::on_pushButton_daten_loeschen_clicked(){ +if(Debug) qDebug() << "on_pushButton_daten_loeschen_clicked"; + if(ui->tableWidget_Datenbank_ausgabe->rowCount()<=0) return; + // id ermitteln + if(ui->pushButton_id->text()=="") return; + QString Zeile = ui->tableWidget_Datenbank_ausgabe->item(ui->pushButton_id->text().toInt()-1, 0)->text(); + int id=0; + query.exec(QString("SELECT * FROM video WHERE pfad LIKE '%1'").arg(Zeile.replace(QString("'"), QString("''")))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + + while(query.next()){ + id=query.value(0).toInt(); + } + // id ermitteln ende + if (QMessageBox::Yes == QMessageBox(QMessageBox::Warning, "Datensatz löschen!", "Willst du wirklich löschen?", QMessageBox::No|QMessageBox::Yes).exec()){ + query.exec(QString("DELETE FROM video WHERE _rowid_ IN ('%1')").arg(QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + on_lineEdit_suchen_textChanged(); + } + ui->statusbar->showMessage("Datensatz gelöscht!"); +if(Debug) qDebug() << "on_pushButton_daten_loeschen_clicked-Ende"; +} + +void MainWindow::on_tableWidget_Datenbank_ausgabe_cellClicked(int row, int column){ +if(Debug) qDebug() << "on_tableWidget_Datenbank_ausgabe_cellClicked"; + ui->tableWidget_Datenbank_ausgabe->selectRow(row); + QString Zeile = ui->tableWidget_Datenbank_ausgabe->item(row, 0)->text(); + ui->pushButton_id->setText(QString::number(row+1)); + + query.exec(QString("SELECT * FROM video WHERE pfad LIKE '%1'").arg(Zeile.replace(QString("'"), QString("''")))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + + while(query.next()){ + ui->pushButton_pfad->setText(query.value(1).toString()); + ui->lineEdit_titel->setText(query.value(2).toString()); + ui->comboBox_bildformat->setCurrentText(query.value(3).toString()); + ui->comboBox_filmtyp->setCurrentText(query.value(4).toString()); + ui->lineEdit_teil->setText(query.value(5).toString()); + ui->comboBox_genre->setCurrentText(query.value(6).toString()); + ui->lineEdit_laenge->setText(query.value(7).toString()); + ui->lineEdit_jahr->setText(query.value(8).toString()); + ui->comboBox_fsk->setCurrentText(query.value(9).toString()); + ui->plainTextEdit_handlung->document()->setPlainText(query.value(10).toString()); + + QByteArray outByteArray = query.value(11).toByteArray(); + QPixmap pixmap = QPixmap(); + pixmap.loadFromData(outByteArray); + ui->label_bild->setPixmap(pixmap.scaledToHeight(297)); + + if(QFileInfo::exists(query.value(1).toString())){ + ui->pushButton_status->setStyleSheet("background-color: #88ff88; border-radius: 3px;"); + } else{ + ui->pushButton_status->setStyleSheet("background-color: #ff8888; border-radius: 3px;"); + } + } +if(Debug) qDebug() << "on_tableWidget_Datenbank_ausgabe_cellClicked-Ende"; +} + +void MainWindow::on_pushButton_speichern_clicked(){ +if(Debug) qDebug() << "on_pushButton_speichern_clicked"; + if(ui->tableWidget_Datenbank_ausgabe->rowCount()<=0) return; + // id ermitteln + if(ui->pushButton_id->text()=="") return; + QString Zeile = ui->tableWidget_Datenbank_ausgabe->item(ui->pushButton_id->text().toInt()-1, 0)->text(); + int id=0; + query.exec(QString("SELECT * FROM video WHERE pfad LIKE '%1'").arg(Zeile.replace(QString("'"), QString("''")))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + + while(query.next()){ + id=query.value(0).toInt(); + } + // id ermitteln ende + // Titel speichern + QString Titel = ui->lineEdit_titel->text(); + query.exec(QString("UPDATE video SET Titel=('%1') WHERE id=('%2')").arg(Titel.replace(QString("'"), QString("''")), QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + // Bildformat speichern + QString Bildformat = ui->comboBox_bildformat->currentText(); + query.exec(QString("UPDATE video SET Bildformat=('%1') WHERE id=('%2')").arg(Bildformat.replace(QString("'"), QString("''")), QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + // Filmtyp speichern + QString Filmtyp = ui->comboBox_filmtyp->currentText(); + query.exec(QString("UPDATE video SET Filmtyp=('%1') WHERE id=('%2')").arg(Filmtyp.replace(QString("'"), QString("''")), QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + // Teil speichern + QString Teil = ui->lineEdit_teil->text(); + query.exec(QString("UPDATE video SET Teil=('%1') WHERE id=('%2')").arg(Teil.replace(QString("'"), QString("''")), QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + // Genre speichern + QString Genre = ui->comboBox_genre->currentText(); + query.exec(QString("UPDATE video SET Genre=('%1') WHERE id=('%2')").arg(Genre.replace(QString("'"), QString("''")), QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + // Länge speichern + QString Laenge = ui->lineEdit_laenge->text(); + query.exec(QString("UPDATE video SET Länge=('%1') WHERE id=('%2')").arg(Laenge.replace(QString("'"), QString("''")), QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + // Jahr speichern + QString Jahr = ui->lineEdit_jahr->text(); + query.exec(QString("UPDATE video SET Jahr=('%1') WHERE id=('%2')").arg(Jahr.replace(QString("'"), QString("''")), QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + // FSK speichern + QString FSK = ui->comboBox_fsk->currentText(); + query.exec(QString("UPDATE video SET FSK=('%1') WHERE id=('%2')").arg(FSK.replace(QString("'"), QString("''")), QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + // Handlung speichern + QString Handlung = ui->plainTextEdit_handlung->toPlainText(); + query.exec(QString("UPDATE video SET Handlung=('%1') WHERE id=('%2')").arg(Handlung.replace(QString("'"), QString("''")), QString::number(id))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + ui->statusbar->showMessage("Daten gespeichert"); + int row = ui->tableWidget_Datenbank_ausgabe->currentRow(); + on_lineEdit_suchen_textChanged(); + on_tableWidget_Datenbank_ausgabe_cellClicked(row, 0); +if(Debug) qDebug() << "on_pushButton_speichern_clicked-Ende"; +} + +void MainWindow::on_pushButton_bild_clicked(){ +if(Debug) qDebug() << "on_pushButton_bild_clicked"; + if(ui->tableWidget_Datenbank_ausgabe->rowCount()<=0) return; + // id ermitteln + if(ui->pushButton_id->text()=="") return; + QString Zeile = ui->tableWidget_Datenbank_ausgabe->item(ui->pushButton_id->text().toInt()-1, 0)->text(); + int id=0; + query.exec(QString("SELECT * FROM video WHERE pfad LIKE '%1'").arg(Zeile.replace(QString("'"), QString("''")))); + if(query.lastError().isValid()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + + while(query.next()){ + id=query.value(0).toInt(); + } + // id ermitteln ende + + fileName = QFileDialog::getOpenFileName(this, tr("Öffne Bild"), "c:", tr("Bild Datei (*.png *.jpg *.gif *.bmp)")); + + if(!(fileName=="")){ + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly)) return; + QByteArray inByteArray = file.readAll(); + query.prepare(QString("UPDATE video SET Bild=(:imageData) WHERE id=('%1')").arg(QString::number(id))); + query.bindValue(":imageData", inByteArray); + if(!query.exec()){ + ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText()); + } + on_tableWidget_Datenbank_ausgabe_cellClicked(ui->pushButton_id->text().toInt()-1, 0); + } + on_pushButton_speichern_clicked(); +if(Debug) qDebug() << "on_pushButton_bild_clicked-Ende"; +} + +void MainWindow::on_pushButton_pfad_clicked(){ +if(Debug) qDebug() << "on_pushButton_pfad_clicked"; + QStringList Datei_tmp = ui->pushButton_pfad->text().split("/"); + QString Datei = Datei_tmp.at(Datei_tmp.length()-1); + QStringList Dateiname_tmp = Datei.split("."); + QString Dateiname; + for(int i=0; ilineEdit_titel->setText(Dateiname); +if(Debug) qDebug() << "on_pushButton_pfad_clicked"; +} + diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..65ff677 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,61 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + // Menü + void on_actionDaten_aktualisieren_triggered(); + void on_actionDaten_ausgeben_triggered(); + void on_actionBeenden_triggered(); + void on_actionPfad_zu_den_Videos_triggered(); + // Navigation + Speichern + void on_pushButton_minus_clicked(); + void on_pushButton_plus_clicked(); + void on_pushButton_speichern_clicked(); + void on_pushButton_abspielen_clicked(); + void on_pushButton_bild_clicked(); + // Suchen + void on_lineEdit_suchen_textChanged(); + // Löschen + void on_pushButton_daten_loeschen_clicked(); + // Andere + void on_tableWidget_Datenbank_ausgabe_cellClicked(int row, int column); + // + + void on_pushButton_pfad_clicked(); + +private: + void oeffneDatenbank(); + void schiesseDatenbank(); + void leseVerzeichnis(); + int Debug; + QString fileName; + QString datenPfad; + Ui::MainWindow *ui; + QSqlDatabase db; + QSqlQuery query; +}; +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..fc507f8 --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,373 @@ + + + MainWindow + + + + 0 + 0 + 947 + 707 + + + + MainWindow + + + + + + + Ausgabe + + + + + + + + + + + + Videodaten + + + + + + + + + + + + + + + Status + + + + + + + Daten löschen + + + + + + + + + + Länge + + + + + + + + + + FSK + + + + + + + + + + + + + + + + Bild + + + + + + + + 210 + 297 + + + + + 210 + 297 + + + + + 0 + 0 + + + + + + + + + + + + + + Format + + + + + + + + + + + + + + + + Teil + + + + + + + Jahr + + + + + + + + + + Titel + + + + + + + Genre + + + + + + + Typ + + + + + + + + + + + + + / + + + + + + + < + + + + + + + Abspielen + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Speichern + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 75 + 23 + + + + + 75 + 23 + + + + + + + + + + + + 75 + 23 + + + + + 75 + 23 + + + + + + + + + + + > + + + + + + + + + + + + + + + + Pfad + + + + + + + + + + + + + + + + + Suchen + + + + + + + + + + + + + + 0 + 0 + 947 + 21 + + + + + Datei + + + + + + + + + Einstellungen + + + + + + + + + + Daten aktualisieren + + + + + Daten ausgeben + + + + + Pfad zu den Videos + + + + + Beenden + + + + + +