Beliebig viele Objekte erzeugen

Alles rund um die Programmierung mit Qt
Antworten
naraesk
Beiträge: 13
Registriert: 26. Juli 2010 03:25

Beliebig viele Objekte erzeugen

Beitrag von naraesk »

Hallo,

ich arbeite mich, da alle Bücher in der Bibliothek hierzu ausgeliehen sind, anhand der Dokumentation in Qt 4 ein und habe daher mal eine Frage, wie ich folgendes am besten umsetzen kann:
Ich möchte zur Laufzeit neue Instanzen einer Klasse erstellen. Mit jedem Klick des Anwenders auf einen Button soll ein neues Exemplar erzeugt werden. Diese müssen natürlich einen eindeutigen Namen haben, um darauf zugreifen zu können.
Ohne Qt würde ich, da C++ selbst das wohl so nicht ohne weiteres kann, einen STL- Vektor verwenden. Gibt es in Qt 4 vielleicht ein Mittel, um das ganze etwas eleganter zu lösen?

Danke. ;)
Zuletzt geändert von naraesk am 26. Juli 2010 13:20, insgesamt 1-mal geändert.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Re: Beliebig viele Objekte erzeugen

Beitrag von padreigh »

Wie wäre es einen QVector zu verwenden? Und einen eindeutigen Namen kannst du dir mit QString("irgendnschlauertextdendeaberauchweglassenkannst").append(QString::number(++meinstaticint)) erstellen ...
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
naraesk
Beiträge: 13
Registriert: 26. Juli 2010 03:25

Beitrag von naraesk »

Der STL- Vektor hat den Nachteil, dass beim Löschen eines Objektes in der Mitte, alle nachfolgenden kopiert werden müssen. Ich nehme an, der QVector hat denselben Mangel?
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

naraesk hat geschrieben:Der STL- Vektor hat den Nachteil, dass beim Löschen eines Objektes in der Mitte, alle nachfolgenden kopiert werden müssen. Ich nehme an, der QVector hat denselben Mangel?
Wenn du "weisst" warum nimmst du dann einen Vector? Schau dir halt mal QList und Co an ... bzw. deren stl pendants (queue, ...)
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

naraesk hat geschrieben:Der STL- Vektor hat den Nachteil, dass beim Löschen eines Objektes in der Mitte, alle nachfolgenden kopiert werden müssen. Ich nehme an, der QVector hat denselben Mangel?
http://doc.trolltech.com/4.6/containers ... er-classes
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
naraesk
Beiträge: 13
Registriert: 26. Juli 2010 03:25

Beitrag von naraesk »

padreigh hat geschrieben:Wenn du "weisst" warum nimmst du dann einen Vector? Schau dir halt mal QList und Co an ... bzw. deren stl pendants (queue, ...)
Weil eine STL- Liste wiederum den Nachteil hat, dass ich keinen Wahlfreien Zugriff habe, oder sehe ich das falsch? Aber wird wohl auf QList oder QVector hinauslaufen, danke.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Jeder Container hat vor und Nachteile.

Schneller Index zugriff und schnelles Anfuegen/Loeschen an beliebigen Positionen beissen sich von der Programmierlogik her. Du musst also selber priorisieren.

Ist Dir der Index Zugriff so wichtig, und der muss mega performant sein, dann wirst das langsame Anfuegen/loeschen wohl in kauf nehmen.

Kannst DU den Index Zugriff eliminieren (Die Objecte in Folge im Speicher ausgreichtet wirst sicher nicht brauchen, ich geh zumindest mal von aus) dann ist der vector eh nicht dein idealer Container.

Brauchst du zwar einen Index zugriff, aber die Performance iss da nicht soo wichtig, kannst du ne Liste nehmen und den Index zugriff selber (unperformant) nachprogrammieren.

Oder du nimmst nen nichtstandard COntainer, der dir was aehnliches bietet. Z.b. die QList. Das ist eigentlich ein Zeiger Array. Der zweck ... bei dem umkopieren wie bei vectoren notwendig, werden nimmer die Objecte verschoben (und konsequenter weisse damit auch immer konstruktoren/ destruktoren aufgerufen) sondern es werden nur die zeiger auf die Objecte verschoben .... Das bringt natuerlich nur was, wenn das kopieren deiner Objecte nicht trivial ist.

An deiner stelle wuerd ich als erstes Fragen, Ob du den index operator eliminieren kannst.
99% aller neueinsteiger / Umsteiger meinen sie brauchen den, tuns aber nicht wirklich (weil sie nicht mit iteratoren umgehen koennen).
Performance ist meist nie ein problem, bzw die problematischen Zeiten koennen an Stellen verlagert werden wo es unproblematisch ist ...

Ciao ...
Antworten