Qt3: Zeichnen auf QFrame oder Alternativ-Lösungen
-
Hallo,
ich habe folgendes Problem und komme seit 1 Woche an dieser Stelle nicht weiter. Hoffentlich kann mir jemand helfen, der schon fortgeschrittener in Sachen Qt ist:
Habe mit dem Qt-Designer eine Oberfläche erstellt, deren Hauptteil eine Fläche ist, auf die man zeichnen kann. Da man ja bekanntlicherweise keine QCanvas über den Designer bekommt, habe ich ein QFrame benutzt. Habe gelesen, dass dies ein Ersatz sein kann. Ich muss einfach auf eine Fläche Kreise oder Quadrate zeichnen, um einen Vorgang zu visualisieren.
1. Lösungsversuch:
There are several widgets you cannot use directly from designer, but here
is a workaround that owkrs quite well :- use a simple QFrame instead of the QCanvas
- in your dialog / widget constructor, add a layout to the frame
(QHBoxLayout will do) so the frame contents resize themselves correctly,- create your QCanvas (or other widget) as child of the frame and add it
to the layout.You can do this with any kind of widget (QCanvas, custom widget...) in Qt
2.3 or 3.0. Of course with Qt 3.0, if you use a lot of custom widgets, you
might want to consider making a plug in instead.Ich weiß nicht wie ich eine QCanvas als Kindobjekt des QFrames deklariere und sie dann "über" meinen QFrame lege.
2. Lösungsversuch:
Ich habe versucht die Methoden des QFrame:
virtual void paintEvent ( QPaintEvent * event ) oder virtual void drawFrame ( QPainter * p ) zu benutzen. Leider auch hier ohne Erfolg.
Sehe ich das grundsätzlich richtig, dass mir als Programmierschnittstelle für eigenen Code beim qt-Designer die Formular.ui.h zu Verfügung steht, wenn ich an die Elemente im Formular direkt rankommen möchte?Letzter Versuch:
Habe das QFrame sein lassen und versucht in der Formular.ui.h mir einen QPainter zu initialisieren und direkt auf das QWidget zu zeichnen. Doch da geschieht auch nichts. Habe einiges über QPixmap, QPainter, QPainterEvent und QPainterDevice gelesen, aber verstehe das Zusammenspiel der Klassen nicht.Ich bin ein wenig ratlos. Kann mir jemand helfen? Am liebsten wäre mir ein Lösung nach Muster Nummer 1. Aber ich würde auch alles andere benutzen, wenn es funktioniert.
Vielen Dank.
Ciao G-Sus
-
Hallo,
ich arbeite zwar ohne den Qt-Designer, aber vielleicht kann ich dir trotzdem weiterhelfen.
Generell kann man in einen QFrame NICHT zeichnen.
Einfacher wäre es ein QDialog zu nehmen: dort ist zeichnen, so wie du es willst, möglich.
-
Hallo malabarista,
danke für die Antwort. Ich habe alles so ein wenig verworfen und bin noch mal ganz anders an die Sache herangegangen. Mit einer übergebenen QCanvas aus der main.cpp lässt sich prima arbeiten und zeichnen. Somit ist die Leinwand an die Stelle des QFrames in meinem Layout getreten. Dein Tipp es mit dem Designer sein zu lassen, war aber absolut richtig, da man solche Sache nur "per Hand" programmiert bekommt.
Ciao
G-Sus