QList<T> statt QObjectList [gelöst]

Alles rund um die Programmierung mit Qt
Antworten
sanni
Beiträge: 39
Registriert: 27. Mai 2010 11:53

QList<T> statt QObjectList [gelöst]

Beitrag 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?
Zuletzt geändert von sanni am 29. November 2010 15:35, insgesamt 2-mal geändert.
Qt 4.3 auf SuSE 10.3
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

'Funktioniert nicht' ist keine Fehlerbeschreibung
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

doku

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