Qt
QGraphics
Recherche…
Panoramique, zoom et rotation avec QGraphicsView
QGraphics
peut être utilisé pour organiser des scènes compliquées d’objets visuels dans un cadre plus facile à manipuler.
Il existe trois principaux types d'objets utilisés dans ce cadre: QGraphicsView , QGraphicsScene et QGraphicsItems . QGraphicsItems sont les éléments visuels de base qui existent dans la scène.
De nombreux types sont préconfigurés et peuvent être utilisés, tels que les ellipses , les lignes , les chemins , les pixels , les polygones , les rectangles et le texte .
Vous pouvez également créer vos propres éléments en héritant de QGraphicsItem
. Ces éléments sont ensuite placés dans un QGraphicsScene
qui est fondamentalement le monde que vous envisagez de regarder. Les objets peuvent se déplacer dans la scène, ce qui revient à les faire bouger dans le monde que vous regardez. Le positionnement et l'orientation des éléments sont gérés par des matrices de transformation appelées QTransforms . Qt a de jolies fonctions intégrées, vous n'avez donc pas besoin de travailler directement avec QTransforms
, mais vous appelez des fonctions telles que pivoter ou redimensionner pour créer les transformations appropriées. La scène est ensuite visualisée selon la perspective définie dans QGraphicsView
(à nouveau avec QTransforms
), qui est l'élément que vous QTransforms
dans un widget de votre interface utilisateur.
Dans l'exemple suivant, il y a une scène très simple avec un seul élément (une pixmap), qui est placé dans une scène et affiché dans une vue. En DragMode
indicateur DragMode
, la scène peut être déplacée avec la souris et en utilisant les fonctions de mise à l'échelle et de rotation, elle peut être mise à l'échelle avec le défilement de la souris et pivotée avec les touches fléchées.
Si vous souhaitez exécuter cet exemple, créez une instance de View qui sera affichée et créez un fichier de ressources avec le préfixe / images contenant une image my_image.png.
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>
#include <QWheelEvent>
#include <QKeyEvent>
class View : public QGraphicsView
{
Q_OBJECT
public:
explicit View(QWidget *parent = 0) :
QGraphicsView(parent)
{
setDragMode(QGraphicsView::ScrollHandDrag);
QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem(QPixmap(":/images/my_image.png"));
pixmapItem->setTransformationMode(Qt::SmoothTransformation);
QGraphicsScene *scene = new QGraphicsScene();
scene->addItem(pixmapItem);
setScene(scene);
}
protected Q_SLOTS:
void wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
scale(1.25, 1.25);
else
scale(0.8, 0.8);
}
void keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Left)
rotate(1);
else if(event->key() == Qt::Key_Right)
rotate(-1);
}
};