QThread, QPixmap, QListWidget ... und Exceptions.

Alles rund um die Programmierung mit Qt
Antworten
shi
Beiträge: 2
Registriert: 22. Februar 2006 21:01

QThread, QPixmap, QListWidget ... und Exceptions.

Beitrag von shi »

Hallo,
ich habe hier ein etwas komisches Problem ... vielleicht kann mir mal wieder jemand nen Tipp geben!? Ich versuche folgendes:

Das Hauptfenster hat ein QListWidget - in dem Thumbnails von Bildern angezeigt werden sollen. Das Hauptfenster erzeugt dazu aus einer Liste von Bildern die ListWidgetItems, an denen ein Zeiger auf eine Klasse "ThumbItem" hängt - die ein QPixmap speichert, nämlich das Thumbnail zu den Bildern. Das QPixmap ist am Anfang nur ein NULL Zeiger.
Beim Erzeugen der Klasse ThumbItem wird gleichzeit ein Thread gestartet, der das Bild einlesen und daraus das Thumbnail generieren soll - der Zeiger auf das Thumbnail wird dann im ThumbItem gespeichert ... (ein delegate für das ListWidget zeichnet dann die Thumbnails).

die Run Methode des Threads sieht in so aus:

void ThumbWorker::run() {
QPixmap *pm = new QPixmap ( myFilename );
*pm = pm->scaled ( 100, 100, Qt::KeepAspectRatio );
}

Wenn das ausgeführt wird, gibt es aber üble Fehlermeldung (X Error: BadRequest ... X Error: BadLength ...) ... hin und wieder kommt auch "terminate called without an active exception"

Erzeuge ich witzigerweise zuerst ein QImage, skaliere das QImage ... und erzeuge dann aus dem QImage ein QPixmap, dann kommen diese Fehlermeldungen nicht - und es scheint zu funktionieren.

Bitte beachten: Der Thread weist im Moment das erzeugte QPixmap dem ThumbItem noch gar nicht zu, d.h. dass der Thread IMHO keine GUI-Elemente updatet.

Was mache ich hier falsch? Warum darf man in eimem Thread keine QPixmaps erzeugen?

PS:
Ich arbeite unter Linux/X11 mit qt4.1.1
Antworten