QPainter Rechteck aufziehen

Alles rund um die Programmierung mit Qt
Antworten
sfbeetle
Beiträge: 9
Registriert: 13. September 2017 12:55

QPainter Rechteck aufziehen

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QPainter Rechteck aufziehen

Beitrag von Christian81 »

Am Anfang das Label komplett mit der Background-Farbe übermalen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
sfbeetle
Beiträge: 9
Registriert: 13. September 2017 12:55

Re: QPainter Rechteck aufziehen

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QPainter Rechteck aufziehen

Beitrag 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 ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten