Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : QPainter zeichnet nur die Hälfte



xmarvel
13-06-2005, 19:54
Hi,

Da ich eine QCanvasElipsse nur die Aussenlinien malen will hab ich die Methoden draw() drawShape überschrieben.



void QCircleCanvas::draw(QPainter & p)
{
p.setPen(pen());
drawShape(p);
}

void QCircleCanvas::drawShape(QPainter& p)
{
p.drawArc((int)x(), (int)y(), width(), height(), 0, 16*360);
}

Er malt zwar intern den Kreis komplett anzeigen tut er das nur zu 1/4 wenn man was anderes neu rüberzeichnet sieht man den Kreis wieder komplett.
Wenn ich die Breite und die Höhe des Kreises halbiere dann gibt es keine Probleme mit der Darstellung. :confused:
Anscheinend aktualisiert er das nur in ein bestimmten Bereich.
Wollte mit setClipRegion was verändern hat bei mir aber nicht funktioniert.

MFG
xmarvel

anda_skoa
13-06-2005, 21:20
Ist das eine QCanvasEllipse Ableitung oder ein eigenes Item?

Btw, QPainter::drawEllipse, falls du ohnhin den ganzen Umfang zeichnen willst.

Ciao,
_

xmarvel
13-06-2005, 22:01
die Klassen Deklaration sieht vereinfacht folgendermaße aus:


class QCircleCanvas : public QCanvasEllipse
public:
QCircleCanvas(QCanvas*);
void draw(QPainter & p);
void drawShape(QPainter & p);
}


MIt drawEllipse kommt das selbe Phänomen das er es nicht vollständig angezeigt wird.

MFG
xmarvel

anda_skoa
13-06-2005, 22:56
Hmm, wenn ich das richtig verstanden habe ruft QCanvasEllipse::draw intern drawShape auf.
Versuch mal ohne deine Implementation von drawShape, d.h. nur draw überschreiben, Pen setzen und drawShape aufrufen.

Nur zur Sicherheit: die QCanvasEllipse wird bei gleichen Daten immer vollständig gezeichnet?

Ciao,
_

xmarvel
13-06-2005, 23:38
Versuch mal ohne deine Implementation von drawShape, d.h. nur draw überschreiben, Pen setzen und drawShape aufrufen.

Immer noch das gleich Problem aber dabei sieht man sehr schön das Problem :
Da ich beim Zeichnen mit der Maus ein Rechteck aufziehe also von oben links nach unten Rechts und dadrin halt die Ellipse eingezeichnet wird. (Also der Fixpunkt liegt dabei oben links).

Aber drawShape aktualisiert immer nur den Bereich der von dem Mittelpunkt von der Ellipse ausgeht (da man das schwer erklären kann hab ich das mal schnell gemalt) Der rote Kreis wird von drawShape immer aktualisiert. Der Teil der im roten Bereich drin ist wird auch angezeigt. Später aufgemalt werden soll das ganze aber so wie der schwarze Kreis.


Nur zur Sicherheit: die QCanvasEllipse wird bei gleichen Daten immer vollständig gezeichnet?

Wenn ich QCanvasEllipse zeichne hab ich keine Probleme nur er zeigt ja immer ein ausgefülltes Kreis an.
Hab noch andere Canvas Arten Linien Rechecke etc. dabei hab ich keinerlei Probleme (ausser beim Bewegen einer Linie mittels move :rolleyes: )

MFG
xmarvel

xmarvel
14-06-2005, 00:08
Hab mir den Quellcode von qcanvas angeschaut was genau dort bei drawShape passiert. Es wird dabei nur die Ellipse gezeichnet.
Dabei ist mir die Methode areaPoints() aufgefallen hab diese überschrieben die richtigen Punkte gesetzt und siehe das jetzt funktinioert es. :)

Mal schauen vielleicht find ich so ja auch das Problem wieso er beim Verschieben einer QCanvasLine mittels move plötzlich die Linie absausst als ob ihn eine Biene gestochen hat. :D

MFG
xmarvel