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.
Wie wäre es einen QVector zu verwenden? Und einen eindeutigen Namen kannst du dir mit QString("irgendnschlauertextdendeaberauchweglassenkannst").append(QString::number(++meinstaticint)) erstellen ...
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?
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, ...)
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?
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.
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 ...