Witam, czy moglby mi ktos wyjasnic dzialanie kodu, to znaczy w paru miejscach nie wiem, co on wykonuje. Tam gdzie ni wiem, zostawie kod bez komentarza:
#ifndef SQLQUERYMODEL_H
#define SQLQUERYMODEL_H
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlRecord>
//zdefiniowalismy plik naglowkowy .h i dolaczylismy do niego 3 bilbioteki
class SqlQueryModel : public QSqlQueryModel //Tworze klase, ktora dziedziczy od klasy QSqlQueryModel
{
Q_OBJECT //Macro, dzieki ktoremu klasa moze uzyac sygnalow
Q_PROPERTY(QString query READ queryStr WRITE setQueryStr NOTIFY queryStrChanged)
Q_PROPERTY(QStringList userRoleNames READ userRoleNames CONSTANT)
public:
using QSqlQueryModel::QSqlQueryModel;
QHash<int, QByteArray> roleNames() const
{
QHash<int, QByteArray> roles;
for (int i = 0; i < record().count(); i ++) {
roles.insert(Qt::UserRole + i + 1, record().fieldName(i).toUtf8());
}
return roles;
}
QVariant data(const QModelIndex &index, int role) const
{
QVariant value;
if (index.isValid()) {
if (role < Qt::UserRole) {
value = QSqlQueryModel::data(index, role);
} else {
int columnIdx = role - Qt::UserRole - 1;
QModelIndex modelIndex = this->index(index.row(), columnIdx);
value = QSqlQueryModel::data(modelIndex, Qt::DisplayRole);
}
}
return value;
}
QString queryStr() const{
return query().lastQuery(); //zwaacam ostatni query
}
void setQueryStr(const QString &query){
if(queryStr() == query)
return;
setQuery(query);
emit queryStrChanged(); //wysylanie query do bazy danych
}
QStringList userRoleNames() const {
QStringList names;
for (int i = 0; i < record().count(); i ++) {
names << record().fieldName(i).toUtf8();
}
return names;
} //pobieranie rekordow z bazy danych dodawanie ich do listy
signals:
void queryStrChanged();
};
#endif // SQLQUERYMODEL_H
I tych 2 rzeczy, tzn QHash i QVariant, nie jestem pewien, co one dokladnie robia, a chcialbym to w pelni zrozumiec, dziekuje za pomoc
Pozdrawiam DC