diff options
Diffstat (limited to 'examples/sql/masterdetail')
-rw-r--r-- | examples/sql/masterdetail/CMakeLists.txt | 21 | ||||
-rw-r--r-- | examples/sql/masterdetail/dialog.cpp | 39 | ||||
-rw-r--r-- | examples/sql/masterdetail/dialog.h | 27 | ||||
-rw-r--r-- | examples/sql/masterdetail/main.cpp | 4 | ||||
-rw-r--r-- | examples/sql/masterdetail/mainwindow.cpp | 59 | ||||
-rw-r--r-- | examples/sql/masterdetail/mainwindow.h | 29 |
6 files changed, 100 insertions, 79 deletions
diff --git a/examples/sql/masterdetail/CMakeLists.txt b/examples/sql/masterdetail/CMakeLists.txt index 7a77e6ffb7..558bf70ee2 100644 --- a/examples/sql/masterdetail/CMakeLists.txt +++ b/examples/sql/masterdetail/CMakeLists.txt @@ -1,15 +1,9 @@ # Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause cmake_minimum_required(VERSION 3.16) project(masterdetail LANGUAGES CXX) -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/sql/masterdetail") - find_package(Qt6 REQUIRED COMPONENTS Core Gui Sql Widgets Xml) qt_standard_project_setup() @@ -48,7 +42,14 @@ qt_add_resources(masterdetail "masterdetail" ) install(TARGETS masterdetail - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" + BUNDLE DESTINATION . + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +) + +qt_generate_deploy_app_script( + TARGET masterdetail + OUTPUT_SCRIPT deploy_script + NO_UNSUPPORTED_PLATFORM_ERROR ) +install(SCRIPT ${deploy_script}) diff --git a/examples/sql/masterdetail/dialog.cpp b/examples/sql/masterdetail/dialog.cpp index 19e941af30..0b8ed8a75b 100644 --- a/examples/sql/masterdetail/dialog.cpp +++ b/examples/sql/masterdetail/dialog.cpp @@ -3,10 +3,23 @@ #include "dialog.h" -int uniqueAlbumId; -int uniqueArtistId; - -Dialog::Dialog(QSqlRelationalTableModel *albums, QDomDocument details, +#include <QDialogButtonBox> +#include <QDate> +#include <QDomDocument> +#include <QGroupBox> +#include <QLabel> +#include <QLineEdit> +#include <QMessageBox> +#include <QPushButton> +#include <QSpinBox> +#include <QSqlField> +#include <QSqlRelationalTableModel> +#include <QSqlRecord> +#include <QVBoxLayout> + +int Dialog::s_artistId = 0; +int Dialog::s_albumId = 0; +Dialog::Dialog(QSqlRelationalTableModel *albums, const QDomDocument &details, QFile *output, QWidget *parent) : QDialog(parent) { @@ -25,6 +38,12 @@ Dialog::Dialog(QSqlRelationalTableModel *albums, QDomDocument details, setWindowTitle(tr("Add Album")); } +void Dialog::setInitialAlbumAndArtistId(int albumId, int artistId) +{ + s_albumId = albumId; + s_artistId = artistId; +} + void Dialog::submit() { QString artist = artistEditor->text(); @@ -145,7 +164,7 @@ void Dialog::addTracks(int albumId, const QStringList &tracks) */ } -void Dialog::increaseAlbumCount(QModelIndex artistIndex) +void Dialog::increaseAlbumCount(const QModelIndex &artistIndex) { QSqlTableModel *artistModel = model->relationModel(2); @@ -219,7 +238,7 @@ QDialogButtonBox *Dialog::createButtons() return buttonBox; } -QModelIndex Dialog::indexOfArtist(const QString &artist) +QModelIndex Dialog::indexOfArtist(const QString &artist) const { QSqlTableModel *artistModel = model->relationModel(2); @@ -234,12 +253,12 @@ QModelIndex Dialog::indexOfArtist(const QString &artist) int Dialog::generateArtistId() { - uniqueArtistId += 1; - return uniqueArtistId; + s_artistId += 1; + return s_artistId; } int Dialog::generateAlbumId() { - uniqueAlbumId += 1; - return uniqueAlbumId; + s_albumId += 1; + return s_albumId; } diff --git a/examples/sql/masterdetail/dialog.h b/examples/sql/masterdetail/dialog.h index 0c5a728ebb..2a4f5a0b8e 100644 --- a/examples/sql/masterdetail/dialog.h +++ b/examples/sql/masterdetail/dialog.h @@ -4,17 +4,25 @@ #ifndef DIALOG_H #define DIALOG_H -#include <QtWidgets> -#include <QtSql> -#include <QtXml> +#include <QDialog> +#include <QDomDocument> + +QT_FORWARD_DECLARE_CLASS(QDialogButtonBox) +QT_FORWARD_DECLARE_CLASS(QFile) +QT_FORWARD_DECLARE_CLASS(QGroupBox) +QT_FORWARD_DECLARE_CLASS(QLineEdit) +QT_FORWARD_DECLARE_CLASS(QModelIndex) +QT_FORWARD_DECLARE_CLASS(QSpinBox) +QT_FORWARD_DECLARE_CLASS(QSqlRelationalTableModel) class Dialog : public QDialog { Q_OBJECT public: - Dialog(QSqlRelationalTableModel *albums, QDomDocument details, + Dialog(QSqlRelationalTableModel *albums, const QDomDocument &details, QFile *output, QWidget *parent = nullptr); + static void setInitialAlbumAndArtistId(int albumId, int artistId); private slots: void revert(); @@ -27,10 +35,8 @@ private: QDialogButtonBox *createButtons(); QGroupBox *createInputWidgets(); int findArtistId(const QString &artist); - static int generateAlbumId(); - static int generateArtistId(); - void increaseAlbumCount(QModelIndex artistIndex); - QModelIndex indexOfArtist(const QString &artist); + void increaseAlbumCount(const QModelIndex &artistIndex); + QModelIndex indexOfArtist(const QString &artist) const; QSqlRelationalTableModel *model; QDomDocument albumDetails; @@ -40,6 +46,11 @@ private: QLineEdit *titleEditor; QSpinBox *yearEditor; QLineEdit *tracksEditor; + + static int generateAlbumId(); + static int generateArtistId(); + static int s_artistId; + static int s_albumId; }; #endif diff --git a/examples/sql/masterdetail/main.cpp b/examples/sql/masterdetail/main.cpp index 8b6ee61828..50d99cf24e 100644 --- a/examples/sql/masterdetail/main.cpp +++ b/examples/sql/masterdetail/main.cpp @@ -7,12 +7,8 @@ #include <QApplication> #include <QFile> -#include <stdlib.h> - int main(int argc, char *argv[]) { - Q_INIT_RESOURCE(masterdetail); - QApplication app(argc, argv); if (!createConnection()) diff --git a/examples/sql/masterdetail/mainwindow.cpp b/examples/sql/masterdetail/mainwindow.cpp index d720db1033..020a149b22 100644 --- a/examples/sql/masterdetail/mainwindow.cpp +++ b/examples/sql/masterdetail/mainwindow.cpp @@ -4,12 +4,20 @@ #include "mainwindow.h" #include "dialog.h" -#include <QtWidgets> -#include <QtSql> -#include <QtXml> - -extern int uniqueAlbumId; -extern int uniqueArtistId; +#include <QApplication> +#include <QComboBox> +#include <QHeaderView> +#include <QFile> +#include <QGridLayout> +#include <QGroupBox> +#include <QLabel> +#include <QListWidget> +#include <QMenu> +#include <QMenuBar> +#include <QMessageBox> +#include <QSqlRecord> +#include <QSqlRelationalTableModel> +#include <QTableView> MainWindow::MainWindow(const QString &artistTable, const QString &albumTable, QFile *albumDetails, QWidget *parent) @@ -28,13 +36,12 @@ MainWindow::MainWindow(const QString &artistTable, const QString &albumTable, QGroupBox *details = createDetailsGroupBox(); artistView->setCurrentIndex(0); - uniqueAlbumId = model->rowCount(); - uniqueArtistId = artistView->count(); + Dialog::setInitialAlbumAndArtistId(model->rowCount(), artistView->count()); connect(model, &QSqlRelationalTableModel::rowsInserted, - this, &MainWindow::updateHeader); + this, &MainWindow::adjustHeader); connect(model, &QSqlRelationalTableModel::rowsRemoved, - this, &MainWindow::updateHeader); + this, &MainWindow::adjustHeader); QGridLayout *layout = new QGridLayout; layout->addWidget(artists, 0, 0); @@ -67,7 +74,7 @@ void MainWindow::changeArtist(int row) } } -void MainWindow::showArtistProfile(QModelIndex index) +void MainWindow::showArtistProfile(const QModelIndex &index) { QSqlRecord record = model->relationModel(2)->record(index.row()); @@ -84,7 +91,7 @@ void MainWindow::showArtistProfile(QModelIndex index) imageLabel->hide(); } -void MainWindow::showAlbumDetails(QModelIndex index) +void MainWindow::showAlbumDetails(const QModelIndex &index) { QSqlRecord record = model->record(index.row()); @@ -113,14 +120,11 @@ void MainWindow::getTrackList(QDomNode album) { trackList->clear(); - QDomNodeList tracks = album.childNodes(); - QDomNode track; - QString trackNumber; - + const QDomNodeList tracks = album.childNodes(); for (int i = 0; i < tracks.count(); ++i) { - track = tracks.item(i); - trackNumber = track.toElement().attribute("number"); + const QDomNode track = tracks.item(i); + const QString trackNumber = track.toElement().attribute("number"); QListWidgetItem *item = new QListWidgetItem(trackList); item->setText(trackNumber + ": " + track.toElement().text()); @@ -132,7 +136,7 @@ void MainWindow::addAlbum() Dialog *dialog = new Dialog(model, albumData, file, this); int accepted = dialog->exec(); - if (accepted == 1) { + if (accepted == QDialog::Accepted) { int lastRow = model->rowCount() - 1; albumView->selectRow(lastRow); albumView->scrollToBottom(); @@ -142,10 +146,10 @@ void MainWindow::addAlbum() void MainWindow::deleteAlbum() { - QModelIndexList selection = albumView->selectionModel()->selectedRows(0); + const QModelIndexList selection = albumView->selectionModel()->selectedRows(0); if (!selection.empty()) { - QModelIndex idIndex = selection.at(0); + const QModelIndex &idIndex = selection.at(0); int id = idIndex.data().toInt(); QString title = idIndex.sibling(idIndex.row(), 1).data().toString(); QString artist = idIndex.sibling(idIndex.row(), 2).data().toString(); @@ -172,9 +176,7 @@ void MainWindow::deleteAlbum() void MainWindow::removeAlbumFromFile(int id) { - QDomNodeList albums = albumData.elementsByTagName("album"); - for (int i = 0; i < albums.count(); ++i) { QDomNode node = albums.item(i); if (node.toElement().attribute("id").toInt() == id) { @@ -197,12 +199,12 @@ void MainWindow::removeAlbumFromFile(int id) */ } -void MainWindow::removeAlbumFromDatabase(QModelIndex index) +void MainWindow::removeAlbumFromDatabase(const QModelIndex &index) { model->removeRow(index.row()); } -void MainWindow::decreaseAlbumCount(QModelIndex artistIndex) +void MainWindow::decreaseAlbumCount(const QModelIndex &artistIndex) { int row = artistIndex.row(); QModelIndex albumCountIndex = artistIndex.sibling(row, 2); @@ -358,7 +360,7 @@ void MainWindow::showImageLabel() imageLabel->show(); } -QModelIndex MainWindow::indexOfArtist(const QString &artist) +QModelIndex MainWindow::indexOfArtist(const QString &artist) const { QSqlTableModel *artistModel = model->relationModel(2); @@ -370,11 +372,6 @@ QModelIndex MainWindow::indexOfArtist(const QString &artist) return QModelIndex(); } -void MainWindow::updateHeader(QModelIndex, int, int) -{ - adjustHeader(); -} - void MainWindow::adjustHeader() { albumView->hideColumn(0); diff --git a/examples/sql/masterdetail/mainwindow.h b/examples/sql/masterdetail/mainwindow.h index a5f9e70648..cc2a5c9f59 100644 --- a/examples/sql/masterdetail/mainwindow.h +++ b/examples/sql/masterdetail/mainwindow.h @@ -8,15 +8,13 @@ #include <QMainWindow> #include <QModelIndex> -QT_BEGIN_NAMESPACE -class QComboBox; -class QFile; -class QGroupBox; -class QLabel; -class QListWidget; -class QSqlRelationalTableModel; -class QTableView; -QT_END_NAMESPACE +QT_FORWARD_DECLARE_CLASS(QComboBox) +QT_FORWARD_DECLARE_CLASS(QFile) +QT_FORWARD_DECLARE_CLASS(QGroupBox) +QT_FORWARD_DECLARE_CLASS(QLabel) +QT_FORWARD_DECLARE_CLASS(QListWidget) +QT_FORWARD_DECLARE_CLASS(QSqlRelationalTableModel) +QT_FORWARD_DECLARE_CLASS(QTableView) class MainWindow : public QMainWindow { @@ -31,21 +29,20 @@ private slots: void addAlbum(); void changeArtist(int row); void deleteAlbum(); - void showAlbumDetails(QModelIndex index); - void showArtistProfile(QModelIndex index); - void updateHeader(QModelIndex, int, int); + void showAlbumDetails(const QModelIndex &index); + void showArtistProfile(const QModelIndex &index); + void adjustHeader(); private: - void adjustHeader(); QGroupBox *createAlbumGroupBox(); QGroupBox *createArtistGroupBox(); QGroupBox *createDetailsGroupBox(); void createMenuBar(); - void decreaseAlbumCount(QModelIndex artistIndex); + void decreaseAlbumCount(const QModelIndex &artistIndex); void getTrackList(QDomNode album); - QModelIndex indexOfArtist(const QString &artist); + QModelIndex indexOfArtist(const QString &artist) const; void readAlbumData(); - void removeAlbumFromDatabase(QModelIndex album); + void removeAlbumFromDatabase(const QModelIndex &album); void removeAlbumFromFile(int id); void showImageLabel(); |