Frage

Ich habe ein QMainWindow mit drei Widgets im Inneren, die sich für eine Klasse förderte eine subclassed QThread enthält. Sie verfügen jeweils Unentschieden auf einem lokalen QImage in ihrer rexpective QThread, die mit einem Signal gesendet wird, sobald sein gezeichnet und dann wiedergegeben durch Update Aufruf (mandlebrot Beispiels) aus dem Steckplatz. Ist das sicher oder gefährlich? Sie keine Daten gemeinsam nutzen, zumindest keine, dass ich zu erzeugen und frage mich, welche Daten sie Sharing sein könnte, die außerhalb meiner Codierung Bereich, dh, die automatisch von Qt erzeugt wird.

War es hilfreich?

Lösung

die Dokumentation :

kann QPainter verwendet werden, um Farbe auf QImage, QPrinter und QPicture Farbe Geräte. Malerei auf QPixmaps und QWidgets wird nicht unterstützt. Unter Mac OS X der automatische Fortschrittsdialog wird nicht angezeigt, wenn Sie von außerhalb des GUI-Thread drucken.

Ein beliebige Anzahl von Threads kann zu einem bestimmten Zeitpunkt malen, aber nur ein Thread zu einem Zeitpunkt an einem bestimmten Zeichengerät malen kann. Mit anderen Worten können zwei Threads gleichzeitig malen, wenn jeweils Farben auf separaten QImages, aber die beiden Threads können nicht auf die gleiche QImage zugleich malen.

Beachten Sie, dass auf X11-Systeme ohne FontConfig Unterstützung, Qt nicht Text außerhalb des GUI-Thread machen kann. Sie können die QFontDatabase :: supportsThreadedFontRendering () Funktion verwenden, um festzustellen, ob oder nicht die Schriftwiedergabe kann außerhalb des GUI-Thread verwendet werden.

Also, solange Sie sind vorsichtig über die Schriftart Problem auf X11, keine Pixmaps verwenden oder Cursor (die als Pixmaps umgesetzt werden), und versuchen Sie nicht, die gleichzeitig auf das gleiche Bild zu malen aus mehrere Threads ... es sollte funktionieren.

Beachten Sie, dass in dem Mandelbrot Beispiel die QImage von Wert über das Signal weitergeleitet wird (implizit gemeinsam), was bedeutet, dass, wenn entweder Thread versucht einen Schreib es seine eigene Kopie erhalten wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top