QPainter /QPaintEvent,....

Alles rund um die Programmierung mit Qt
Antworten
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

QPainter /QPaintEvent,....

Beitrag 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ß
Zuletzt geändert von Neuling_ am 1. Dezember 2009 17:08, insgesamt 1-mal geändert.
Qt 2009.05
Entw.-umgebung Qt-Creator
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

Beitrag 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ß
Zuletzt geändert von Neuling_ am 11. Januar 2010 10:36, insgesamt 1-mal geändert.
Qt 2009.05
Entw.-umgebung Qt-Creator
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Warum vom QGraphicsView und nicht vom QWidget?
Neuling_
Beiträge: 83
Registriert: 8. August 2009 20:55

Beitrag 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();
}
Qt 2009.05
Entw.-umgebung Qt-Creator
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Dann lies dir Doku von QGraphicsView durch. Du hast im paintEvent vom QGraphicsView nichts zu suchen...
Antworten