Seite 1 von 1

QList<T> statt QObjectList [gelöst]

Verfasst: 18. November 2010 23:56
von sanni
Es war einmal ein Programm (in Qt3 geschrieben), das heute nach Qt4 übersetzt werden soll.
Dort gibt es eine Klasse MyLabel von QLabel abgeleitet, in der Methoden den Zustand des Objekts verändern.
Da ich eine ganze Menge davon benutze, waren die Label in einer QObjektList eingefügt. Diese Liste hatte einige Funktionen, die sehr nützlich waren. Da diese Liste in Qt4 so nicht mehr existiert, bleibt QList<MyLabel> als Container.

Ein Zeiger auf ein Label wird über die GUI geholt, woraufhin das Label aus der Liste gelöscht werden soll:

Code: Alles auswählen

labelListe.removeAt( labelListe.indexOf( *dragLabel ) );
Leider erzeugt diese Zeile einen Fehler:

Code: Alles auswählen

no match for 'operator==' in 'n->QList<T>::Node::t [with T = MyLabel]() == t'
Den verstehe ich leider überhaupt nicht.


Ferner gibt es folgende Zeilen:

Code: Alles auswählen

void Programm::addLabel( data ){
  MyLabel *l  = new Mylabel( data );
  //...
  labelListe.append( *l );
}
die sich nicht übersetzen lassen, da l nicht vom Typ T& ist, sondern T*. Casts sind nicht so meine Stärke. Wie kriege ich das Label in die Liste?

Verfasst: 19. November 2010 06:31
von Christian81
Klassen welche von QObject kann man nicht kopieren, also kann man auch keine Objekte dieses Typs in einer Liste (oder was auch immer) speichern. Man kann nur die Pointer darauf in einer Liste speichern.

doku

Verfasst: 19. November 2010 11:55
von softwaremaker
wenn ich in der Doku nach QObjektList suche kommt folgendes:
typedef QObjectList

Synonym for QList<QObject *>.
Also eine Liste mit Zeiger auf Objects.