QgarphicsItem est un élément du système de vue Qt. QGraphicsItem lui-même ne prend pas en charge le glissement de la souris pour zoomer. Cet article décrit comment modifier la taille de l'élément en modifiant les événements de la souris. (La version Qt utilisée dans cet article est Qt4.8)
La fonction implémentée par le code ci-dessous est : maintenez la touche Maj enfoncée et faites glisser avec la souris pour modifier la taille de la Boîte.
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()); }
Les deux morceaux de code ci-dessus sont la définition de la classe Box et l'implémentation du constructeur. Le plus important est la surcharge de. les trois fonctions de la souris, et SetFlag permet à la Box d'accepter les événements du clavier.
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); }
Ici, mettez simplement à jour les coins inférieur gauche et supérieur droit de la boîte pour qu'ils correspondent à la position de la souris. Une meilleure approche serait de gérer les coordonnées x et y séparément.
void Box::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if(resizing) { resizing = false; setCursor(Qt::ArrowCursor); } else QGraphicsItem::mouseReleaseEvent(event); }
Lorsque l'utilisateur relâche la souris pendant le processus de redimensionnement, le redimensionnement devient vrai et le style de la souris redevient une flèche.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!