//album.h
#ifndef ALBUM_H
#define ALBUM_H
#include <QObject>
class Album : public QObject
{
Q_OBJECT
public:
explicit Album(QObject *parent = nullptr,QString composer="",QString title="",double cost=0,int rating=0);
QString getComposer() const;
void setComposer(const QString &composer);
QString getTitle() const;
void setTitle(const QString &title);
double getCost() const;
void setCost(double cost);
int getRating() const;
void setRating(int rating);
private:
QString composer;
QString title;
double cost;
int rating;
signals:
};
#endif // ALBUM_H
//album.cpp
#include "album.h"
Album::Album(QObject *parent,QString composer,QString title,double cost,int rating)
: QObject{parent}
{
setTitle(title);
setComposer(composer);
setCost(cost);
setRating(rating);
}
QString Album::getComposer() const
{
return composer;
}
void Album::setComposer(const QString &composer)
{
this->composer = composer;
}
QString Album::getTitle() const
{
return title;
}
void Album::setTitle(const QString &title)
{
this->title = title;
}
double Album::getCost() const
{
return cost;
}
void Album::setCost(double cost)
{
this->cost = cost;
}
int Album::getRating() const
{
return rating;
}
void Album::setRating(int rating)
{
this->rating = rating;
}
//musicmodel.h
#ifndef MUSICMODEL_H
#define MUSICMODEL_H
#include <QObject>
#include <QDebug>
#include <QAbstractTableModel>
#include "album.h"
class MusicModel : public QAbstractTableModel
{
Q_OBJECT
public:
MusicModel(QObject *parent = nullptr);
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
QList<Album *> getAlbums() const;
void setAlbums(const QList<Album *> &newAlbums);
void append(Album *album);
int albumCount() const;
Album* getAlbum(int index) const;
private:
QList<Album*> albums;
};
#endif // MUSICMODEL_H
//musicmodel.cpp
#include "musicmodel.h"
MusicModel::MusicModel(QObject *parent) : QAbstractTableModel(parent)
{
}
QVariant MusicModel::data(const QModelIndex &index, int role) const
{
QVariant var;
if (!index.isValid() || role != Qt::DisplayRole) {
return QVariant();
}
// qInfo() << "index.row(): " << index.row();
// qInfo() << "model->albumCount(): " << this->albumCount();
Album* album = this->getAlbum(index.row());
if(!album)
{
qInfo() << "album: null";
return var;
}
switch (index.column())
{
case 0:
var.setValue(QString(album->getComposer()));
return var;
case 1:
var.setValue(QString(album->getTitle()));
return var;
case 2:
var.setValue(album->getCost());
return var;
case 3:
var.setValue(album->getRating());
return var;
default:
return QVariant();
}
return QVariant();
}
int MusicModel::rowCount(const QModelIndex &parent) const
{
return this->albums.count();
}
int MusicModel::columnCount(const QModelIndex &parent) const
{
return 4;
}
QVariant MusicModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
if (section == 0) {
return QString("Composer");
} else if (section == 1) {
return QString("Album Title");
} else if (section == 2) {
return QString("Cost");
} else if (section == 3) {
return QString("Rating");
}
}
return QVariant();
}
QList<Album *> MusicModel::getAlbums() const
{
return albums;
}
void MusicModel::setAlbums(const QList<Album *> &albums)
{
this->albums = albums;
}
void MusicModel::append(Album *album)
{
this->albums.append(album);
}
int MusicModel::albumCount() const
{
this->albums.count();
}
Album *MusicModel::getAlbum(int index) const
{
return this->albums.at(index);
}
//dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include "MusicModel.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
void init();
private:
Ui::Dialog *ui;
MusicModel *model;
private slots:
void addAlbum();
};
#endif // DIALOG_H
//dialog.cpp
#include "dialog.h"
#include "./ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
init();
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::init()
{
connect(ui->btnAdd,&QPushButton::clicked,this,&Dialog::addAlbum);
model = new MusicModel(this);
Album *queen = new Album(this,"Freddy M","Bohemian Rapsody",12.50,10);
model->append(queen);
ui->tableView->setModel(model);
}
void Dialog::addAlbum()
{
qInfo() << "addAlbum";
Album *album = new Album(this);
album->setComposer(ui->txtComposer->text());
album->setTitle(ui->txtAlbumTitle->text());
album->setCost(ui->boxCost->value());
album->setRating(ui->boxRating->value());
model->append(album);
}