수색…


QGraphicsView로 화면 이동, 확대 / 축소 및 회전

QGraphics 는 시각적 객체의 복잡한 장면을 쉽게 처리 할 수있는 프레임 워크로 구성하는 데 사용할 수 있습니다.

이 프레임 워크에는 QGraphicsView , QGraphicsSceneQGraphicsItems 의 세 가지 주요 유형의 객체가 사용됩니다. QGraphicsItems는 장면에 존재하는 기본 시각적 항목입니다.

타원 , , 패스 , 픽스맵 , 다각형 , 직사각형텍스트 와 같이 사전 빌드되어 사용될 수있는 많은 유형이 있습니다.

QGraphicsItem 을 상속 받음으로써 나만의 아이템을 만들 수도 있습니다. 이 항목들은 QGraphicsScene 저장됩니다. QGraphicsScene 은 기본적으로 당신이 보려고하는 세계입니다. 항목은 당신이보고있는 세계에서 움직이는 것과 같은 장면 안에서 움직일 수 있습니다. 항목의 위치 및 방향은 QTransforms 라는 변환 행렬에 의해 처리됩니다. Qt는 내장 된 멋진 함수를 가지고 있으므로 대개 QTransforms 직접 작업 할 필요가 없으며 대신 적절한 변형을 생성하는 rotate 또는 scale과 같은 함수를 호출해야합니다. 장면은 UI의 위젯에 넣을 조각 인 QGraphicsView 정의 된 Perspective (다시 QTransforms )로 볼 수 있습니다.

다음 예제에서는 하나의 항목 (픽스맵)이있는 매우 간단한 장면이 장면에 배치되어보기에 표시됩니다. 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