Heim > Artikel > Web-Frontend > QGraphicsItem-Skalierung
QgarphicsItem ist ein Element im Qt-Ansichtssystem. QGraphicsItem selbst unterstützt das Ziehen mit der Maus zum Zoomen nicht. In diesem Artikel wird beschrieben, wie Sie die Größe des Elements durch Ändern von Mausereignissen ändern. (Die in diesem Artikel verwendete Qt-Version ist Qt4.8)
Die durch den folgenden Code implementierte Funktion ist: Halten Sie die Umschalttaste gedrückt und ziehen Sie mit der Maus, um die Größe der Box zu ändern.
class Box:public QGraphicsItem { Q_DECLARE_TR_FUNCTIONS(Box)public: Box(); ...protected: void mousePressEvent(QGraphicsSceneMouseEvent *event); void mouseMoveEvent(QGraphicsSceneMouseEvent *event); void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); };
Box::Box() { setFlags(QGraphicsItem::ItemIsSelectable| QGraphicsItem::ItemIsMovable| QGraphicsItem::ItemSendsGeometryChanges| QGraphicsItem::ItemIsFocusable); //接受键盘事件 mBoundingRect = QRectF(0,0,100,100); mBoundingRect.translate(-mBoundingRect.center()); }
Die beiden oben genannten Codeteile sind die Definition der Box-Klasse und die Implementierung des Konstruktors. Das Wichtigste ist die Überladung die drei Mausfunktionen und SetFlag ermöglicht der Box, Tastaturereignisse zu akzeptieren.
void Box::mousePressEvent(QGraphicsSceneMouseEvent *event) { if(event->modifiers()&Qt::ShiftModifier) { resizing = true; //resizing变量在鼠标点击时变为true //在放开时变为false setCursor(Qt::SizeAllCursor);//鼠标样式变为十字 } else QGraphicsItem::mousePressEvent(event); }
void Box::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { if(resizing) { QRectF rect(mBoundingRect); if(event->pos().x()<rect.x()) rect.setBottomLeft(event->pos()); else rect.setBottomRight(event->pos()); mBoundingRect=rect; mBoundingRect.translate(-mBoundingRect.center()); scene()->update(); } else QGraphicsItem::mouseMoveEvent(event); }
Aktualisieren Sie hier einfach die untere linke und obere rechte Ecke der Box, damit sie mit der Mausposition übereinstimmen. Ein besserer Ansatz wäre, die x- und y-Koordinaten getrennt zu behandeln.
void Box::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if(resizing) { resizing = false; setCursor(Qt::ArrowCursor); } else QGraphicsItem::mouseReleaseEvent(event); }
Wenn der Benutzer die Maus während des Größenänderungsvorgangs loslässt, wird die Größenänderung in „True“ geändert und der Mausstil wird wieder in einen Pfeil geändert.
Das obige ist der detaillierte Inhalt vonQGraphicsItem-Skalierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!