Seite 1 von 1

c++ Anfängerfrage QList<Class> bzw. QList<Class *>

Verfasst: 24. Februar 2016 12:44
von nullxff
Hallo liebe Leute!

Kann jemand erklären, wie die Konstruktoren implementiert werden müssen um das Erzeugen von QLists in diesen zwei Schreibweisen zu erreichen?

Code: Alles auswählen

QList<Class> myclass; 
bzw.

Code: Alles auswählen

QList<Class *> myclass; 
Aufgefallen ist es mir, als ich eine QList<QObject> anlegen wollte, was nicht funktioniert. QList<QObject *> dagegen schon.

Bitte um Antworten!

Re: c++ Anfängerfrage QList<Class> bzw. QList<Class *>

Verfasst: 24. Februar 2016 18:01
von Christian81
QList<Class> - Objekte der Klasse 'Class' in einem QList-Container
QList<Class*> - Zeiger auf Objekte der Klasse 'Class' in einem QList-Container

Re: c++ Anfängerfrage QList<Class> bzw. QList<Class *>

Verfasst: 24. Februar 2016 19:57
von nullxff
Danke für die Antwort, das war mir aber klar.

Wollte wissen wie man dieses Verhalten erreicht. es hat irgenwas mit dem (Copy)Construktor zu tun.

Re: c++ Anfängerfrage QList<Class> bzw. QList<Class *>

Verfasst: 25. Februar 2016 07:07
von Christian81
Welches Verhalten?

Re: c++ Anfängerfrage QList<Class> bzw. QList<Class *>

Verfasst: 25. Februar 2016 11:58
von MichaelS
nullxff hat geschrieben: Wollte wissen wie man dieses Verhalten erreicht. es hat irgenwas mit dem (Copy)Construktor zu tun.
Es hat in der Tat mit dem Kopierkonstruktor zu tun. Dieser ist private deklariert und aus diesem Grunde kannst Du QObject und dessen Abkömmlinge nicht in QList verwenden.

Re: c++ Anfängerfrage QList<Class> bzw. QList<Class *>

Verfasst: 2. März 2016 09:20
von RHBaum
An der Stelle auch der Tipp, sich mit C++ abseits der Qt zu befassen.

Containerklassen und die Anforderung an die "Memberclasses" werden z.b. in der STL (Teil des c++ standards) behandelt.
Da Qt C++ (und damit auch Kentnisse über c++) vorraussetzt, ist die Doku Qt bezogen an der Stelle etwas mau, sondern verweisst eher auf die C++ Grundlagen.

Weiterhin ist Qt und C++ zwar von der Programmiersprache und damit von den Grundlagen her dasselbe, aber Style-technisch liegen trotzdem Welten dazwischen.
Qt ist eher mieses C++ Design, aber dafür super auf den Zweck (GUI's / Userinteraction) zugeschnitten.
Qt Programmierung hat IMHO mehr mit Java (Grabage Collection) gemeinsam als mit Standard C++.

Der Unterschied zwischen Standard C++ und GUI's generell ist oft, das ne C++ funktionalitaet as soon as posibble fertig sein muss, d.h. wenig laufzeit, wenig ressourcenverbrauch das oberste ziel ist.
GUI's (klassisch 2D Controls) hingegen idlen soweiso 90% der Zeit irgendwo rum ... da hat mans nicht so eilig. Da liegt der Fokus eher auf Konzeptionelle Vereinfachung doch Recht komplexer DInge die im Hintergrund laufen ...
RAD (https://de.wikipedia.org/wiki/Rapid_App ... evelopment) ist da das Stichwort.

Also zu Deutsch, die Frage ob die Klasse oder Pointer auf die Klasse mit allen Vor und Nachteilen und besseren Lösungen stellst dir viel eher im Standard C++
In Qt wirst fast immer den Zeiger nehmen (QObject Hirarchie und self destruction sind da einfach viel zu praktisch)
Von daher findest zu deiner Frage da auch viel mehr Infos an dieser Stelle .... und auch die richtigen Begriffe (CopyConstructible)
Hier z.b.
http://en.cppreference.com/w/cpp/concept/Container

Ciao ...

Re: c++ Anfängerfrage QList<Class> bzw. QList<Class *>

Verfasst: 28. Mai 2016 21:45
von nullxff
Danke... Ich werde mich wohl mehr mit den C++ "Gegebenheiten" auseinandersetzen müssen und lesen, studieren und üben...
Nur ist es so, dass ich schnell mal was benötige und dann werde ich aus dem googlen auch nicht Schlau :)
Beispielsweise wieder jetzt aktuell bei call by reference und call by pointer. Ist fast immer nur mit &int oder *int beschrieben...

Macht es da keinen Unterschied in c++, ob es ein komplexer oder ein primitiver Datentyp ist?

Code: Alles auswählen

QStringList *abc = new QStringList;
TreeModel *model = new TreeModel(*abc); //<- warum wird hier dereferenziert? (der ctor ist so: TreeModel(QStringList &strlst) implementiert.
     QTreeView *view = new QTreeView(this);
     view->setModel(model);
Das hat man davon, wenn man Pc-Programmierung mit java oder c# gelernt hat :)

Re: c++ Anfängerfrage QList<Class> bzw. QList<Class *>

Verfasst: 29. Mai 2016 08:50
von Christian81
Bei der Übergabe ist es egal ob POD oder komplex. Einen POD als const Ref zu übergeben macht nur keinen großen Sinn da die Übergabe eines int bzw. der Referenz auf ein int genauso 'komplex' ist. Bei komplexen Datentypen ist die const Ref zu bevorzugen da sonst die kompletten Daten des Objektes über den Stack übergeben werden müssen was ineffizient ist.
Wenn ein TreeModel also ein 'const QStringList' übergeben haben möchte, kann man kein Pointer auf eine QStringList übergeben.
Das Problem an Pointern in C++ ist dass man sie auch wieder selbst aufräumen muss.