Qt: Auf Formular zeichnen



  • Hi,

    Ich versuche, auf meinem Formular zu zeichnen, aber es funktioniert nicht:

    void MainWindow::ButtonClick()
    {
    
        QPainter painter(this);
    
        painter.setRenderHint(QPainter::Antialiasing, true);
        painter.setPen(QPen(Qt::black, 12, Qt::DashDotDotLine, Qt::RoundCap));
        painter.setBrush(QBrush(Qt::green, Qt::SolidPattern));
        painter.drawEllipse(80, 80, 400, 240);
    
    }
    

    Ich kann das Programm zwar ausführen, aber es funktioniert nicht :

    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setRenderHint: Painter must be active to set rendering hints
    QPainter::setPen: Painter not active
    QPainter::setBrush: Painter not active

    Hat jemand einen Lösungsvorschlag ?

    Danke und Gruß,
    profi



  • Zeichnen tut man in der ::paintEvent(QPaintEvent *event)
    Methode, also lege diese an:
    MeineWidgetKlasse::paintEvent(QPaintEvent *event)
    und darin dein Code. Natürlich noch
    void paintEvent(QPaintEvent *event);
    in den Header der Klasse



  • ansonsten fehlt vermultich sowas wie painter.end() und update() ?



  • Danke euch beiden. Es funktioniert jetzt direkt beim Programmstart. Wie kann ich aber erreichen, dass erst beim Button-klick gezeichnet wird ? Muss ich globale Variablen verwenden ?

    gruß,
    profi



  • profi123456 schrieb:

    Danke euch beiden. Es funktioniert jetzt direkt beim Programmstart. Wie kann ich aber erreichen, dass erst beim Button-klick gezeichnet wird ? Muss ich globale Variablen verwenden ?

    Der paint event wir bei jedem zeichnen des Fensters aufgerufen. Du musst deinen Code so gestalten, das der Painter Abschnitt nur ausgeführt wird nachdem du den Button gedrückt hast. Also z.B. durch das Ändern einer Variable und aufrufen von update() in OnButton...

    Matthias


Anmelden zum Antworten