Qt - QSqlQueryModel - czy dobrze zrobiłem model ?

0

Zrobiłem sobie model dziedziczący po QSqlQueryModel model działa i pytania są następujące.

  1. Czy dobrze wykonałem model ?
  2. Czy funkcje rowCount i columnCount są dobrze zaimplementowane ? Wiem, że jest funkcja typu QModelIndex::rowCount i QModelIndex::columnCount ale ta druga wcale nie chce zwracać mi ilości kolumn, stąd pomysł na wykonanie w obu funkcjach zapytań o te detale
  3. Czy poprawnie przekazuję adres otwartej bazy ? Nie chciało mi się robić funkcji, więc poszedłem na skróty i stworzyłem zmienną przechowującą adres otwartej bazy w ramach całego modelu klasy
  4. Wiem, że mam z d.. nazewnictwo ale czy ktoś ma pomysły jak nazywać sensownie - klasy, zmienne, funkcje ?

Poniżej kod modelu

#include <QSqlQueryModel>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QFont>
#include <QColor>

class SqlQueryModelBorrowingUsers : public QSqlQueryModel
{
public:
    SqlQueryModelBorrowingUsers(QObject *parent=nullptr, QSqlDatabase *dbConnect=nullptr);
    ~SqlQueryModelBorrowingUsers();

private:
    QSqlDatabase *db;
    // QAbstractItemModel interface
    virtual int rowCount(const QModelIndex &parent) const override;
    virtual int columnCount(const QModelIndex &parent) const override;
    virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
    virtual QVariant data(const QModelIndex &index, int role) const override;
    virtual bool setData(const QModelIndex &index, const QVariant &value, int role) override;
    virtual Qt::ItemFlags flags(const QModelIndex &index) const override;

    bool setName(int pID, const QString &pName);
    bool setSurname(int pID, const QString &pSurname);
    void refresh();
};

drugi plik

#include "sqlquerymodelborrowingusers.h"
#include <QDebug>

SqlQueryModelBorrowingUsers::SqlQueryModelBorrowingUsers(QObject *parent, QSqlDatabase *dbConnect) : QSqlQueryModel{parent}
{
    db = dbConnect;

    QString userData = "SELECT pIDuserWyp, pImie, pNazwisko FROM 'tUzytkownicyWypozyczajacy'";

    this->setQuery(userData, *dbConnect);

    this->query().exec();
}

int SqlQueryModelBorrowingUsers::rowCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent);
    int row=0;

    QString rows = "SELECT count(*) FROM 'tUzytkownicyWypozyczajacy'";

    QSqlQuery queryRow(*db);
    queryRow.exec(rows);

    QSqlRecord recRow;
    queryRow.first();
    recRow = queryRow.record();
    row = recRow.value(0).toInt();

    return row;
}

int SqlQueryModelBorrowingUsers::columnCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent);
    int column=0;

    QString columns = "SELECT count(*) FROM PRAGMA_table_info('tUzytkownicyWypozyczajacy')";

    QSqlQuery queryColumn(*db);
    queryColumn.exec(columns);

    QSqlRecord recColumn;

    queryColumn.first();
    recColumn = queryColumn.record();
    column = recColumn.value(0).toInt();

    return column;
}

QVariant SqlQueryModelBorrowingUsers::headerData(int section, Qt::Orientation orientation, int role) const
{
    if(role==Qt::DisplayRole && orientation==Qt::Horizontal){
        if(section==1){
            QVariant header1;
            header1="Imię";

            return header1;
        }
        if(section==2){
            QVariant header2;
            header2="Nazwisko";

            return header2;
        }
    }

    if(role==Qt::DisplayRole && orientation==Qt::Vertical){
        return QString("%1").arg(section+1);
    }

    return QVariant();
}

QVariant SqlQueryModelBorrowingUsers::data(const QModelIndex &index, int role) const
{
    if(this->query().first()==true && this->query().isValid()==true){
        if(this->query().isActive()==true){
            if(this->query().isSelect()==true){
                QVariant myData = QSqlQueryModel::data(index, role);

                if(role==Qt::FontRole && index.column()==1){
                    QFont font;
                    font.setWeight(QFont::ExtraBold);

                    myData = font.toString();
                }

                if(role==Qt::TextAlignmentRole && (index.column()==1 || index.column()==2)){
                    return Qt::AlignCenter;
                }

                if(role==Qt::BackgroundRole && index.row() % 2 == 0){
                    QColor color;
                    color.setRgb(176,161,106,69);

                    myData = color;
                }

                if(role==Qt::BackgroundRole && index.row() % 2 == 1){
                    QColor color;
                    color.setRgb(112,102,67,44);

                    myData = color;
                }

                return myData;
            }
        }
    }
    else if(this->query().isValid()==false){
        return QVariant();
    }

    return QVariant();
}

bool SqlQueryModelBorrowingUsers::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if(!index.isValid()==true){
        return false;
    }
    else{
        if(role==Qt::EditRole || role==Qt::DisplayRole){
            if(index.column()==1){
                value.toString();
                return true;
            }
        }
    }

    return false;
}

Qt::ItemFlags SqlQueryModelBorrowingUsers::flags(const QModelIndex &index) const
{
    Qt::ItemFlags flag = QSqlQueryModel::flags(index);

    if(index.column()==1 || index.column()==2){
        flag |= Qt::ItemIsEditable;

        return flag;
    }

    return flag;
}

bool SqlQueryModelBorrowingUsers::setName(int pID, const QString &pName)
{

}

bool SqlQueryModelBorrowingUsers::setSurname(int pID, const QString &pSurname)
{

}

void SqlQueryModelBorrowingUsers::refresh()
{

}

SqlQueryModelBorrowingUsers::~SqlQueryModelBorrowingUsers()
{
    this->query().clear();
}

1

Czemu pytasz, podepnij pod tabele a zobaczysz.
Brakuje totalnych podstaw C/C++

1 użytkowników online, w tym zalogowanych: 0, gości: 1