Zrobiłem sobie model dziedziczący po QSqlQueryModel
model działa i pytania są następujące.
- Czy dobrze wykonałem model ?
- Czy funkcje
rowCount
icolumnCount
są dobrze zaimplementowane ? Wiem, że jest funkcja typuQModelIndex::rowCount
iQModelIndex::columnCount
ale ta druga wcale nie chce zwracać mi ilości kolumn, stąd pomysł na wykonanie w obu funkcjach zapytań o te detale - 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
- 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();
}