Problema con QList ed oggetto custom
-
ciao!
sto cercado di riempire una QList con un oggetto custom, prendendo i record da db.
ho creato questa classe che rappresenta la mia tabella (i getter ed i setter li ho fatti generare da qt creator):#ifndef SYNC_H #define SYNC_H #include <QObject> class Sync : public QObject { Q_OBJECT public: Sync(); Sync(const Sync &other); Sync &operator = (const Sync &other); qint32 getId() const; void setId(const qint32 &value); QString getNome() const; void setNome(const QString &value); QString getComando() const; void setComando(const QString &value); QString getSource() const; void setSource(const QString &value); QString getDetination() const; void setDetination(const QString &value); private: qint32 id; QString nome; QString comando; QString source; QString detination; }; #endif // SYNC_H #include "sync.h" Sync::Sync() {} Sync::Sync(const Sync &other) { } qint32 Sync::getId() const { return id; } void Sync::setId(const qint32 &value) { id = value; } QString Sync::getNome() const { return nome; } void Sync::setNome(const QString &value) { nome = value; } QString Sync::getComando() const { return comando; } void Sync::setComando(const QString &value) { comando = value; } QString Sync::getSource() const { return source; } void Sync::setSource(const QString &value) { source = value; } QString Sync::getDetination() const { return detination; } void Sync::setDetination(const QString &value) { detination = value; }
poi eseguo le query e faccio questo:
QList<Sync> Database::getAll() { QList<Sync> list; QSqlDatabase db = QSqlDatabase::database(); QSqlQuery query("SELECT * FROM sync"); while (query.next()) { qDebug() << query.value("nome").toString(); Sync sync; sync.setId(query.value("id").toInt()); sync.setNome(query.value("nome").toString()); list.append(sync); } QList<Sync>::const_iterator iter; for (iter = list.constBegin(); iter != list.constEnd(); ++iter) { const Sync &sync = *iter; qDebug() << sync.getNome(); } return list; }
il problema è che il primo debug mi tira fuori i valori correttamente, mentre il secondo un valore vuoto.
penso di sbagliare qualcosa nel setter, ma non capisco cosa. -
-
@VRonin
ciao!ho fatto le modifiche che mi hai detto, però ottengo tutta una serie di errori di questo tipo:
/usr/include/qt/QtCore/qlist.h:435: error: use of deleted function ‘Sync::Sync(const Sync&)’ if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) n->v = new T(t); ^~~~~~~~ sync.h:10: error: use of deleted function ‘QObject::QObject(const QObject&)’
il problema è quanto faccio l'appenda:
while (query.next()) { qDebug() << query.value("nome").toString(); Sync sync; sync.setId(query.value("id").toInt()); sync.setNome(query.value("nome").toString()); list.append(sync); }
se commento l'append il programma non va in errore.
-
@VRonin said in Problema con QList ed oggetto custom:
@fermatqt said in Problema con QList ed oggetto custom:
use of deleted function
Sei sicuro di aver fatto
= default
come sopra e non= delete
?si!
class Sync : public QObject { Q_OBJECT public: Sync(); Sync(const Sync &other) = default; Sync &operator = (const Sync &other) = default; ~Sync(); qint32 getId() const; void setId(const qint32 &value); QString getNome() const; void setNome(const QString &value); QString getComando() const; void setComando(const QString &value); QString getSource() const; void setSource(const QString &value); QString getDetination() const; void setDetination(const QString &value); private: qint32 id; QString nome; QString comando; QString source; QString detination; }; #include "sync.h" Sync::Sync() {} Sync::~Sync() { } qint32 Sync::getId() const { return id; } void Sync::setId(const qint32 &value) { id = value; } QString Sync::getNome() const { return nome; } void Sync::setNome(const QString &value) { nome = value; } QString Sync::getComando() const { return comando; } void Sync::setComando(const QString &value) { comando = value; } QString Sync::getSource() const { return source; } void Sync::setSource(const QString &value) { source = value; } QString Sync::getDetination() const { return detination; } void Sync::setDetination(const QString &value) { detination = value; }
ti ho postato entrambi i file della classe!
-
@VRonin in verità non c'è nessun motivo particolare.
ho modificato così e funziona alla perfezione:
#include <QObject> class Sync { public: Sync(); Sync(const Sync &other) = default; Sync &operator = (const Sync &other) = default; virtual ~Sync(); qint32 getId() const; void setId(const qint32 &value); QString getNome() const; void setNome(const QString &value); QString getComando() const; void setComando(const QString &value); QString getSource() const; void setSource(const QString &value); QString getDetination() const; void setDetination(const QString &value); private: qint32 id; QString nome; QString comando; QString source; QString detination; };
grazie!