Je vais faire du pan/scale sur QGraphicsView.
Donc, j'ai lu la documentation de QGraphicsView et voir quelques fonctions d'utilité comme ensureVisible() et centerOn().
Je pense que je comprends ce que dit la documentation mais je n'arrive pas à écrire un exemple de travail.
Pourriez-vous s'il vous plaît écrire/suggérer un code d'exemple pour comprendre le problème.QGraphicsView ensureVisible() et centerOn()
Répondre
Ton panoramique de la vue d'un certain montant (par exemple dans de mouseMoveEvent()
votre point de vue), en supposant MyView
est une sous-classe de QGraphicsView
(tout le code suivant a été porté de Python, je ne l'ai pas le tester):
void MyView::moveBy(QPoint &delta)
{
QScrollBar *horiz_scroll = horizontalScrollBar();
QScrollBar *vert_scroll = verticalScrollBar();
horiz_scroll->setValue(horiz_scroll.value() - delta.x());
vert_scroll->setValue(vert_scroll.value() - delta.y());
}
pour installer un rectangle spécifié en scène coordonnées en effectuant un zoom et panoramique:
void MyView::fit(QRectF &rect)
{
setSceneRect(rect);
fitInView(rect, Qt::KeepAspectRatio);
}
Notez que si votre scène contient des éléments non transformables (avec le drapeau QGraphicsItem::ItemIgnoresTransformations
), vous devrez prendre e étapes xtra pour calculer leur zone de délimitation correcte:
/**
* Compute the bounding box of an item in scene space, handling non
* transformable items.
*/
QRectF sceneBbox(QGraphicsItem *item, QGraphicsItemView *view=NULL)
{
QRectF bbox = item->boundingRect();
QTransform vp_trans, item_to_vp_trans;
if (!(item->flags() & QGraphicsItem::ItemIgnoresTransformations)) {
// Normal item, simply map its bounding box to scene space
bbox = item->mapRectToScene(bbox);
} else {
// Item with the ItemIgnoresTransformations flag, need to compute its
// bounding box with deviceTransform()
if (view) {
vp_trans = view->viewportTransform();
} else {
vp_trans = QTransform();
}
item_to_vp_trans = item->deviceTransform(vp_trans);
// Map bbox to viewport space
bbox = item_to_vp_trans.mapRect(bbox);
// Map bbox back to scene space
bbox = vp_trans.inverted().mapRect(bbox);
}
return bbox;
}
Dans ce cas, le rect bondissant de vos objets devient dépendant du niveau de zoom de la vue, ce qui signifie que parfois MyView::fit()
ne correspondra pas exactement à vos objets (par exemple lors du montage d'un sélection d'objets à partir d'une vue largement réduite). Une solution rapide et sale consiste à appeler le MyView::fit()
à plusieurs reprises jusqu'à ce que le rectangle englobant se «stabilise» automatiquement.
- 1. Make QGraphicsView faire centerOn lisse
- 2. QGraphicsView et eventFilter
- 3. QGLWidget + QGraphicsScene + QGraphicsView problème
- 4. Événements QGraphicsView acceptés
- 5. Qt - QGraphicsView sans ScrollBar
- 6. QGraphicsView question noobie
- 7. Centre QGraphicsView dans le widget
- 8. Défilement de QGraphicsView par programmation
- 9. Comment utiliser QGraphicsView dans Qt?
- 10. Question de rendu QGraphicsView/QGraphicsScene
- 11. PyQt4 sur Mac: QGraphicsView avec OpenGL scintille
- 12. Qt-> QGraphicsView-> QGraphicsItem redimensionnant
- 13. Comment déplacer un QPixMapImage autour d'un qgraphicsview
- 14. QGraphicsView texte manquant sur certains tirages
- 15. Comment échanger le QGraphicsScene d'un QGraphicsView?
- 16. QGraphicsView ne s'affiche pas dans QMainWindow
- 17. Dessiner des widgets (tels que des boutons) sur QGraphicsView
- 18. Définition d'une couleur d'arrière-plan pour un widget QGraphicsView
- 19. Comment dessiner une ellipse/cercle sur QGraphicsScene dans un QGraphicsView
- 20. Comment ancrer QGraphicsWidget/Item (les rendre statiques) sur QGraphicsView
- 21. Comment dessiner un QPoint sur un QGraphicsView/Scène
- 22. Qt 4.6 - Comment faire glisser et déposer dans un QGraphicsView dans QtCreator?
- 23. QGraphicsView - comment désactiver le défilement de la souris et du clavier
- 24. Beaucoup de blocs de pointeurs dans l'infrastructure et les performances de QGraphicsView
- 25. Pyqt: Comment définir un élément toujours au centre d'un QGraphicsView lorsque le défilement est possible?
- 26. Redimensionnement d'un QGraphicsItem pour prendre tout l'espace dans un QGraphicsView, problèmes lorsque la fenêtre est redimensionnée
- 27. Comment puis-je ajouter par programme un QGraphicsView dans un QMainWindow?
- 28. sélection dans beaucoup de polylignes avec QGraphicsView ne fonctionne pas bien
- 29. Pourquoi mon QGraphicsView n'apparaît-il pas dans ma MainWindow en Qt4?
- 30. QGraphicsView intégré ne se cache pas après la fermeture de la boîte de dialogue
Vous voulez dire panoramique et échelle avec la souris? Ou adapter un ensemble d'objets dans la vue? –
Je suppose qu'il y aura une opération d'ajustement aussi là peut-être une opération pan/échelle avec la souris. – onurozcelik