Seite 1 von 1

Datenübertragung zwischen Klassen mit QList

Verfasst: 7. August 2012 22:30
von jw202
Hallo,

ich habe in meiner Anwendung zwei Klassen (pdfRenderer und DatabaseManager), zwischen denen Datensätze übertragen werden müssen. DatabaseManager soll eine Methode zur Verfügung stellen, die alle Teilnehmer aus einer der besagten Datenbank ausliest und deren Attribute als QList zur Verfügung stellt. Zu diesem Zweck habe ich ein teilnehmerObject erstellt, wo alle relevanten Attribute für Teilnehmer enthalten sind.


Es folgt eine Methode, die alle Einträge einer Datenbank ausliest und die Attribute in ein Objekt verpackt.

Code: Alles auswählen

QList <teilnehmerObject> DatabaseManager::getAllTeilnehmer()
{
    QList <teilnehmerObject> liste;

    this->openDB();
    if (db.isOpen())
    {
        QSqlQuery query(QString("select * from teilnehmer"));
        while (query.next())
            {
            liste.append( new teilnehmerObject(query.value(0).toString(), query.value(1).toString(),query.value(2).toString(),query.value(3).toString(),query.value(4).toInt(),query.value(5).toInt(),query.value(6).toInt(),query.value(7).toInt(),query.value(8).toInt(),query.value(9).toInt()));
            }

    }
    this->closeDB();

    return liste;
}


jetzt kommen so nichtssagende Fehlermeldungen wie
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:-1: In member function 'QList<teilnehmerObject> DatabaseManager::getAllTeilnehmer()':
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:168: Fehler:no matching function for call to 'QList<teilnehmerObject>::append(teilnehmerObject*)'
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:168: candidates are:
/usr/include/qt4/QtCore/qlist.h:507: void QList<T>::append(const T&) [with T = teilnehmerObject]
/usr/include/qt4/QtCore/qlist.h:507: note: no known conversion for argument 1 from 'teilnehmerObject*' to 'const teilnehmerObject&'
/usr/include/qt4/QtCore/qlist.h:841: void QList<T>::append(const QList<T>&) [with T = teilnehmerObject]
/usr/include/qt4/QtCore/qlist.h:841: note: no known conversion for argument 1 from 'teilnehmerObject*' to 'const QList<teilnehmerObject>&'
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.h:15: In file included from ../OebkVerwaltung/databasemanager.h:15:0,
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:2: from ../OebkVerwaltung/databasemanager.cpp:2:
/usr/include/qt4/QtCore/qobject.h:-1: In copy constructor 'teilnehmerObject::teilnehmerObject(const teilnehmerObject&)':
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/teilnehmerobject.h:6: instantiated from 'void QList<T>::node_copy(QList<T>::Node*, QList<T>::Node*, QList<T>::Node*) [with T = teilnehmerObject]'/usr/include/qt4/QtCore/qlist.h:711: instantiated from 'void QList<T>::detach_helper(int) [with T = teilnehmerObject]'
/usr/include/qt4/QtCore/qlist.h:725: instantiated from 'void QList<T>::detach_helper() [with T = teilnehmerObject]'
/usr/include/qt4/QtCore/qlist.h:122: instantiated from 'QList<T>::QList(const QList<T>&) [with T = teilnehmerObject]'
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:174: instantiated from here

/usr/include/qt4/QtCore/qobject.h:333: Fehler:'QObject::QObject(const QObject&)' is private
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/teilnehmerobject.h:6: Fehler:within this context
/home/johannes/qt/OebkVerwaltung-build-desktop-Qt_4_8_1_in_Pfad__System__Release/../OebkVerwaltung/databasemanager.cpp:1: from ../OebkVerwaltung/databasemanager.cpp:1:
/usr/include/qt4/QtCore/qlist.h:-1: In member function 'void QList<T>::node_copy(QList<T>::Node*, QList<T>::Node*, QList<T>::Node*) [with T = teilnehmerObject]':
ich versteh das grundsätzlich nicht. Kann die Fehler nicht nachvollziehen, da ich mich 1:1 an das Tutorial gehalten habe.


PS.: hier ist ein analoges Beispiel mit "Employees" http://www.mathematik.uni-ulm.de/help/q ... qlist.html

Re: Datenübertragung zwischen Klassen mit QList

Verfasst: 7. August 2012 22:40
von Christian81
Die Fehlermeldung ist genau richtig - die QList speichert Objekte aber Du versucht einen Pointer auf ein Objekt in die QList einzutragen --> C++ Grundlagen

Re: Datenübertragung zwischen Klassen mit QList

Verfasst: 7. August 2012 23:20
von jw202
aha ok, ich habs glaub ich verstanden

habe das Problem so gelöst, dass ich die Zeile

Code: Alles auswählen

    QList <teilnehmerObject> liste;
in

Code: Alles auswählen

    QList <teilnehmerObjec*t> liste;
geändert habe. Jetzt werden in der QList nur noch Zeiger gespeichert und es funktioniert auch. Gibt es noch einen besseren (effizienteren/sichereren) Weg wie man das machen kann. Btw wie schauts eigentlich mit der Freigabe vom Speicher aus?

Re: Datenübertragung zwischen Klassen mit QList

Verfasst: 8. August 2012 06:26
von Christian81
Du legst den Speicher an also musst Du dich auch ums Löschen kümmern.