I have following class:
#ifndef UEPEOPLEMODEL_H
#define UEPEOPLEMODEL_H
#include <QImage>
#include <QVariant>
#include <QStringList>
#include <QDebug>
#include <QHash>
#include <QByteArray>
#include <QtSql/QSqlError>
#include <QtSql/QSqlQueryModel>
#include <QtSql/QSqlRecord>
#include <QModelIndex>
#include <QQuickImageProvider>
#include <QHash>
#include <QByteArray>
#include "../settings/uedefaults.h"
class UePeopleModel : public QSqlQueryModel, QQuickImageProvider
{
Q_OBJECT
public:
UePeopleModel(QObject *parent=0);
~UePeopleModel();
QVariant data(const QModelIndex &index,
int role) const Q_DECL_OVERRIDE;
QImage image(const QString &id) const;
QImage requestImage(const QString &id,
QSize *size,
const QSize &requestedSize);
QHash<int, QByteArray> roleNames() const;
public:
static const int UePersonNameRole=Qt::UserRole+1;
static const int UePersonImageRole=UePersonNameRole+1;
};
#endif // UEPEOPLEMODEL_H
and its implementation:
#include "uepeoplemodel.h"
UePeopleModel::UePeopleModel(QObject* parent)
: QSqlQueryModel(parent),
QQuickImageProvider(QQmlImageProviderBase::Image,
QQmlImageProviderBase::ForceAsynchronousImageLoading)
{
QSqlDatabase db;
if(!QSqlDatabase::connectionNames().contains(UePosDatabase::UeDatabaseConnectionNames::DATABASE_CONNECTION_NAME_PEOPLE,
Qt::CaseInsensitive))
{
db=QSqlDatabase::addDatabase(UePosDatabase::DATABASE_DRIVER,
UePosDatabase::UeDatabaseConnectionNames::DATABASE_CONNECTION_NAME_PEOPLE);
} // if
db.setHostName(/*this->uePosSettings()->ueDbHostname()*/UePosDatabase::UeDatabaseConnectionParameters::DATABASE_HOSTNAME);
db.setDatabaseName(/*this->uePosSettings()->ueDbName()*/UePosDatabase::UeDatabaseConnectionParameters::DATABASE_NAME);
db.setUserName(/*this->uePosSettings()->ueDbUser()*/UePosDatabase::UeDatabaseConnectionParameters::DATABASE_USERNAME);
db.setPassword(/*this->uePosSettings()->ueDbPassword()*/UePosDatabase::UeDatabaseConnectionParameters::DATABASE_PASSWORD);
if(db.open())
{
this->setQuery(UePosDatabase::UeSqlQueries::UeTablePeople::SQL_QUERY_GET_ALL_PEOPLE,
db);
}
else
{
qDebug() << db.lastError().text();
}
} // default constructor
UePeopleModel::~UePeopleModel()
{
} // default destructor
QVariant UePeopleModel::data(const QModelIndex &index,
int role) const
{
QVariant value=QSqlQueryModel::data(index,
role);
if(value.isValid())
{
switch(role)
{
case UePeopleModel::UePersonNameRole:
{
return value.toString();
} // case
case UePeopleModel::UePersonImageRole:
{
return QString::number(index.row());
} // case
default:
value=QVariant();
} // switch
} // if
return value;
} // data
QImage UePeopleModel::image(const QString &id) const
{
int iRow=id.toInt();
} // image
QImage UePeopleModel::requestImage(const QString &id,
QSize *size,
const QSize &requestedSize)
{
QImage image=this->image(id);
*size = image.size();
return image;
} // requestImage
QHash<int, QByteArray> UePeopleModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles.clear();
roles.insert(UePeopleModel::UePersonNameRole,
"UePeopleModel::UePersonNameRole");
roles.insert(UePeopleModel::UePersonImageRole,
"UePeopleModel::UePersonNameRole");
return roles;
} // roleNames
Now, If I try to build project, I get following error:
uepeoplemodel.o: In function
UePeopleModel::roleNames() const': /home/markofr/projects/build-ueBlagajnaClient-Desktop_Qt_5_5_0_GCC_64bit-Debug/../ueBlagajnaClient/database/uepeoplemodel.cpp:86: undefined reference to
UePeopleModel::UePersonNameRole' /home/markofr/projects/build-ueBlagajnaClient-Desktop_Qt_5_5_0_GCC_64bit-Debug/../ueBlagajnaClient/database/uepeoplemodel.cpp:88: undefined reference to `UePeopleModel::UePersonImageRole' Makefile:234: recipe for target 'ueBlagajnaClient' failed collect2: error: ld returned 1 exit status make: *** [ueBlagajnaClient] Error 1 10:22:57: The process "/usr/bin/make" exited with code 2. Error while building/deploying project ueBlagajnaClient (kit: Desktop Qt 5.5.0 GCC 64bit)
UePeopleModel::UePersonNameRole
and UePeopleModel::UePersonImageRole
are declared in header as public static int. Why am I getting this error? The error pops up int
roles.insert()statements inside
roleNames()` method.