Leider ist mir der Mechanismus, wie die Grafiken erzeugt werden, einfach nicht klar.
1. Kann man bei einem QLabel das Pixmap direkt setzen
Das wird mein nächster Versuch. Aber ich möchte erst verstehen, wie das Schreiben mit QPainter funktioniert, siehe unten.
2. Sollte es auf der Konsole eine Fehlermeldung geben, warum er das nicht tut.
Auf der Konsole läuft sogar ständig Text durch. Die folgenden beiden Zeilen werden laufend wiederholt:
- QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::setMatrix: Painter not active
aber leider hilft mir das nicht weiter. Es fehlt offensichtlich das paintEvent, aber warum? Wer oder was müsste es auslösen?
3. In der Doku von QPainter gibt es auch die gewünschte Erklärung dazu.
Nun, zu QPainter heißt es, dass er auf alles schreiben kann, was ein QPaintDevice geerbt hat. Da QLabel über QFrame von QWidget abgeleitet ist, nahm ich an, dass auf QLabel geschrieben werden könne. Allerdings steht dann unter QPaintDevice:
"The drawing capabilities of QPaintDevice are currently implemented by the QWidget, QImage, QPixmap, QGLPixelBuffer, QPicture, and QPrinter subclasses"
Nun, das ist jetzt klar - muss man aber auch erst mal finden
Meine Tests ergaben, dass ich auf ein QWidget mit QPainter schreiben kann. In der Version, mit der ich die beschriebenen Probleme habe, ist meine GUI-Struktur:
QWidget Form
|-- QLabel graphView
|-- QPushButton okButton
mit folgendem Code innerhalb Grafiktest::paintEvent(): (Grafiktest ist das aus Form und QDialog abgeleitete Objekt)
Code: Alles auswählen
QPainter painter(this);
painter.drawPixmap(0, 0, bild);
update();
konnte ich das Bild auf das QWidget Form schreiben. Ich will aber das Bild innerhalb von graphView sehen.
Logisch, dann mache ich eben anstelle QLabel graphView einfach QWidget graphView und der Code
Code: Alles auswählen
QPainter painter(graphView);
painter.drawPixmap(0, 0, bild);
graphView->update();
müsste das gewünschte Ergebnis bringen - denkste! Es wird wieder kein Bild angezeigt - und warum das nun?
Wo kann man denn nachlesen, wie das alles zusammenhängt, um zu verstehen, woran es hakt?
Tipps, die mir auf die Sprünge helfen, sind sehr willkommen.