Seite 1 von 1

[Gelöst] QGraphicsTextItem größe ändern und verschieben

Verfasst: 11. September 2010 19:54
von Mani99
Hi,

ich hab folgendes problem, ich habe von QGraphicsTextItem abgeleitet und die mousemove methode überschrieben.

Darin soll es möglich sein, falls die maus auf dem QGraphicsTextItem auf einem bestimmten bereich, nämlich den randbereich kommt, das QGraphicsTextItem in der breite mittels setTextWidth() zu verändern.

Außerdem soll das QGraphicsTextItem auch noch in der QGraphicsScene verschiebbar sein, was ja problemlos mittels setFlag(QGraphicsItem::ItemIsMovable, true) möglich ist.

Das flag ItemIsMovable wird im konstruktor der klasse auf true gestzt.

Was ich möchte ist:
  • wenn nicht der randbereich angeklickt wird, soll das QGraphicsTextItem ganz normal verschoben werden können
    wenn der randbereich angeklickt wird, soll nur die größe verändert werden können
Momentan passiert immer irgendwas, also entweder es wird verschoben oder die größe wird verändert. Ich hätte aber gerne jeweils eine konstante verhaltensweise.

Bitte um hilfe, wie ich das lösen könnte, danke!

Code: Alles auswählen

//Abgeleitete klasse von QGraphicsTextItem
void Test_GraphicsTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    qreal rborder = boundingRect().x()+boundingRect().width();

    if(event->pos().rx() == (rborder-5))
    {
        setFlag(QGraphicsItem::ItemIsMovable, false);

        setTextWidth(event->scenePos().rx()-scenePos().rx());
    }
    else
        setFlag(QGraphicsItem::ItemIsMovable, true);

    QGraphicsTextItem::mouseMoveEvent(event);
}

Verfasst: 11. September 2010 21:43
von franzf
Schreib dir ein eigenes Item, das das resizen übernimmt. Das nimmst du als parent für dein eigentliches Item. Das ist dann eine allgemeine Lösung, die du auf alle QGraphicsItems anwenden kannst.
Such mal hier nach "QGraphicsItem resize" o.Ä., das gabs schon öfter, sogar teilweise mit kompletter Lösung :)

Verfasst: 13. September 2010 09:31
von Mani99
Danke für den hinweis, die lösung habe ich hier gefunden!