Seite 1 von 1

QPainter /QPaintEvent,....

Verfasst: 1. Dezember 2009 13:02
von Neuling_
Hallo,

ich bin nicht mehr im stande einen Strich zu malen. Kann mir bitte jemand weiterhelfen?
Das hier ist die Fehlerausgabe:

QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::end: Painter not active, aborted

Nun zum Code:
test.h

Code: Alles auswählen

QPainter* qPainter;
test.cpp

Code: Alles auswählen

qPainter = new QPainter();
qPainter->setBrush(QBrush(QColor(Qt::red), Qt::SolidPattern));
qPainter->begin(this);
qPainter->drawLine(0, 0, 100, 100);
qPainter->end();
Hoffentlich kann mir jemand helfen.

Gruß

Verfasst: 1. Dezember 2009 13:25
von franzf
Ist das nur ein Flüchtigkeits/Kopier/...-Fehler?

Code: Alles auswählen

qPainter = new QPainter();
[ ... ]
m_qPainter->end();
Klar geht das nicht, du hast 2 QPainter, begin()nst mit dem einen und end()est auf dem anderen.
Außerdem ist das Mist, QPainter al nen Pointer jedesmal neu zu erstellen.
Du hast grad ein ziemliches Memory-Leak, denn dein QPainter wird nie zerstört. Außerdem ist es unnötig den Painter als Member zu halten, malen kannst du eh nur im paintEvent.
So funktioniert es immer wunderbar:

Code: Alles auswählen

QPainter painter(this); 
painter.setBrush(QBrush(QColor(Qt::red), Qt::SolidPattern));
painter.drawLine(0, 0, 100, 100); 
painter.end();
und QPainter als Member entfernen.

Verfasst: 18. Dezember 2009 09:18
von Neuling_
Hallo,

hat etwas gedauert bis ich zum testen kam, sri schonmal an dieser Stelle,
habe jetzt aber den Code mal fast 1:1 übernommen und ich bekomme immernoch die Ausgabe:

QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setBrush: Painter not active
QPainter::end: Painter not active, aborted

Ich habe den Code in einer Klasse integriert, welche von QGraphicsView erbt. Hier das PaintEvent:

Code: Alles auswählen

void xXx::paintEvent(QPaintEvent *e)
{
    QPainter ptr(this);
    ptr.setBrush(QBrush(QColor(Qt::red), Qt::SolidPattern));
    ptr.drawLine(10, 10,500, 500);
    ptr.end();
}
Danke für die Antwort aber schonmal ;)
Gruß

Verfasst: 18. Dezember 2009 09:35
von upsala
Warum vom QGraphicsView und nicht vom QWidget?

Verfasst: 18. Dezember 2009 10:26
von Neuling_
hmm, weil ich dort hineinzeichnen möchte.

Wenn ich eine seperate Klasse erstelle und diese von QWidget ableite kommt wieder der selbe Fehler -.-*

QPainter::setPen: Painter not active
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::end: Painter not active, aborted

Code: Alles auswählen

Klasse xXx : public QWidget
{

}

void xXx::drawCrosshair(int x, int y, int x2, int y2)
{
    Painter.begin(this);
    Painter.drawLine(x , y, x2, y2);
    Painter.end();
}

Verfasst: 18. Dezember 2009 10:47
von upsala
Dann lies dir Doku von QGraphicsView durch. Du hast im paintEvent vom QGraphicsView nichts zu suchen...