サーチ…


QGraphicsViewでパン、ズーム、回転

QGraphicsを使用すると、ビジュアルオブジェクトの複雑なシーンを、扱いやすくするフレームワークに編成することができます。

このフレームワークで使用されるオブジェクトの三大種類がありQGraphicsViewQGraphicsScene 、およびQGraphicsItemsは 。 QGraphicsItemsは、シーンに存在する基本的なビジュアルアイテムです。

楕円パスピクスマップポリゴン長方形テキストなど、あらかじめ構築され使用可能な多くのタイプがあります。

また、 QGraphicsItemを継承して独自のアイテムを作成することもできます。これらの項目は、基本的にあなたが見たいと思っている世界であるQGraphicsScene入れられます。アイテムは、あなたが見ている世界を動かすようなシーン内を移動することができます。項目の位置と方向は、 QTransformsと呼ばれる変換行列によって処理されます 。 Qtには素敵な関数が組み込まれているので、通常はQTransforms直接QTransformsする必要はありません。代わりに、適切な変換を作成するrotateやscaleなどの関数を呼び出します。シーンは、 QGraphicsView定義されたQGraphicsView (再びQTransforms )で表示されます。これは、UIのウィジェットに配置する部分です。

次の例では、1つの項目(ピックスマップ)を持つ非常にシンプルなシーンがシーンに配置され、ビューに表示されます。 DragModeフラグをオンにすることで、シーンをマウスでパンすることができ、スケール機能と回転機能を使用することで、マウスのスクロールで拡大/縮小したり、矢印キーで回転させることができます。

この例を実行する場合は、表示されるViewのインスタンスを作成し、イメージ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);
  }
};


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow