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:

Painter not active, aborted
Nun zum Code:
test.h
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?
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:

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:

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...