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

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
nullxff
Beiträge: 6
Registriert: 22. Februar 2016 19:43

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

Beitrag von nullxff » 24. Februar 2016 13:44

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!

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag von Christian81 » 24. Februar 2016 19:01

QList<Class> - Objekte der Klasse 'Class' in einem QList-Container
QList<Class*> - Zeiger auf Objekte der Klasse 'Class' in einem QList-Container
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

nullxff
Beiträge: 6
Registriert: 22. Februar 2016 19:43

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

Beitrag von nullxff » 24. Februar 2016 20:57

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.

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag von Christian81 » 25. Februar 2016 08:07

Welches Verhalten?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

MichaelS
Beiträge: 239
Registriert: 27. Dezember 2005 13:49

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

Beitrag von MichaelS » 25. Februar 2016 12:58

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.

RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

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

Beitrag von RHBaum » 2. März 2016 10:20

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 ...

nullxff
Beiträge: 6
Registriert: 22. Februar 2016 19:43

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

Beitrag von nullxff » 28. Mai 2016 21:45

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 :)

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag von Christian81 » 29. Mai 2016 08:50

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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

Antworten