Qt
QGraphics
サーチ…
QGraphicsViewでパン、ズーム、回転
QGraphics
を使用すると、ビジュアルオブジェクトの複雑なシーンを、扱いやすくするフレームワークに編成することができます。
このフレームワークで使用されるオブジェクトの三大種類がありQGraphicsView 、 QGraphicsScene 、および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);
}
};