Loading ...

Riempire una QList con oggetti custom

Riempire una QList con oggetti custom

Rispetto ad altri linguaggi, usare oggetti custom in Qt ha qualche complicazione in più.

Soprattutto per quanto riguarda "l'inizializzazione" dell'oggetto custom (potete vedere la discussione sul forum qt.io).

Oggi vediamo come riempire una QList usando un oggetto custom.

Il mio oggetto corrisponde ad una tabella di database; e da li che prenderò i dati.

Iniziamo con l'intestazione del nostro oggetto custom:

#ifndef SYNC_H
#define SYNC_H

#include <QObject>

class Sync {

public:
    Sync();
    Sync(const Sync &other) = default;
    Sync &operator = (const Sync &other) = default;
    virtual ~Sync();

    int getId() const;
    void setId(const int &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 getDestination() const;
    void setDestination(const QString &value);

private:
    int id;
    QString nome;
    QString comando;
    QString source;
    QString destination;
};

#endif // SYNC_H

Questa la sua implementazione:

#include "sync.h"

Sync::Sync() {}

Sync::~Sync() {
}

int Sync::getId() const {
    return id;
}

void Sync::setId(const int &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::getDestination() const {
    return destination;
}

void Sync::setDestination(const QString &value) {
    destination = value;
}

A questo punto non rimane che riempire la lista; qua sotto un metodo che interroga un database e riempire la lista con i record della tabella:

QList<Sync> Database::getAll() {
    QList<Sync> list;
    QSqlDatabase db = QSqlDatabase::database();
    if (db.isOpen()) {
        QSqlQuery query("SELECT * FROM sync");
        while (query.next()) {
            Sync sync;
            sync.setId(query.value("id").toInt());
            sync.setNome(query.value("nome").toString());
            sync.setComando(query.value("comando").toString());
            sync.setSource(query.value("source").toString());
            sync.setDestination(query.value("destination").toString());
            list.append(sync);
        }
        db.close();
    }

    return list;
}

Enjoy!