Seite 1 von 1

QPainter Rechteck aufziehen

Verfasst: 17. Februar 2018 17:09
von sfbeetle
Ich erstelle auf einem angezeigten Image (das auf einem Label liegt), ein Rechteck, das mit der Maus vergrößert und verkleinert werden kann.
Das vergrößern funktioniert einwandfrei, wenn ich das Rechteck aber kleiner mache, bleibt der Rand des größeren, vorherigen Rechteckes stehen, so dass der untere und rechte Rand verbreitert wird.
Leider finde ich keine Möglichkeit das alte Rechteck fliessend zu löschen und das kleinere neu zu erstellen.
Vielleicht ist das aber auch zu kompliziert gedacht.
Kann mir jemand weiterhelfen?

Code: Alles auswählen


void Label::mousePressEvent(QMouseEvent *event)
{
    if((event->button() == Qt::LeftButton))
    {
        point_start = event->pos();
    }
}


void Label::mouseMoveEvent(QMouseEvent *event)
{
    if(event->MouseMove & Qt::LeftButton)
    {
        point_ende = event->pos();
        rahmen = QRect(point_start,point_ende);
        update(rahmen);
    }
    
   
   
 void Label::paintEvent(QPaintEvent *event)
{
    QLabel::paintEvent(event);

    if ( event->MouseMove    )
    {
        QPainter *p = new QPainter(this);
        QPen pen(Qt::blue,3);
        p->setPen(pen);
        p->drawRect(rahmen);
    }
}
Vielen Dank vorab

Re: QPainter Rechteck aufziehen

Verfasst: 18. Februar 2018 08:32
von Christian81
Am Anfang das Label komplett mit der Background-Farbe übermalen.

Re: QPainter Rechteck aufziehen

Verfasst: 19. Februar 2018 18:03
von sfbeetle
Hallo Christian81,
anscheinend habe ich deine Antwort falsch interpretiert.
geänderter Code:

Code: Alles auswählen

	 QPainter *p = new QPainter(this);
   
        QPen = pen(Qt::white,3); // Hintergrundfarbe
        p->setPen(pen);
        p->drawRect(rahmen);
        QPen = pen (Qt::blue,3);
        p->setPen(pen);
        p->drawRect(rahmen);
Ergenbis bleibt unverändert. Überschreibe ich an der falschen Stelle?
Was passiert mit dem ursprünglichen Bild an der freigegebenen stelle?

sfbeetle

Re: QPainter Rechteck aufziehen

Verfasst: 20. Februar 2018 06:30
von Christian81
Du sollst den kompletten Hintergrund des Labels mit dem Background-Brush überschreiben. Qt macht das nicht für dich solange Du nicht das paint-Event der Basisklasse aufrufst ...