Qt Graphics에서의 좌표 체계 이해하기

이미지
여기서는 Qt Graphics에서의 좌표 체계에 대해 알아보기로 한다. Scene에 item들을 원하는 곳에 위치시키기 위해서는 Qt에서 사용하는 좌표 체계를 이해하고 사용할 수 있어야만 한다. Graphics View는 모두 3종류의 좌표체계를 사용하는데 다음과 같다.    (1) item's coordinate system    (2) scene's coordinate system    (3) view's coordinate system 만약 어떤 item상에서 마우스 클릭이 발생했다면, QGraphicsSceneMouseEvent::pos() 함수로 클릭된 좌표값을 구할 수 있는데 이때의 좌표값은 item's coordinate system 의 값이다. scenePos() 및 sceneBoundingRect() 로 구한 좌표값은  scene's coordinate system을 따른다. 주의할 점은 item들은 parent-child 관계로 연결될 경우 child 들은 parent의  item's coordinate system을 따른다는 것이고 따라서 pos()함수로 계산된 좌표값은 parent의  item's coordinate system상의 값이다. 아래에서 생성된 item을 살펴 보자. 3개의 QGraphicsRectItem을 생성했으며 크기는 20x20이고 위치는 서로 다른 값을 갖는다. QGraphicsRectItem * itemA = new QGraphicsRectItem (- 100 , - 100 , 200 , 200 ); QGraphicsRectItem * itemB = new QGraphicsRectItem ( 0 , 0 , 200 , 200 ); QGraphicsRectItem * itemC = new QGraphicsRectItem ( 100 , 100 , 200 , 200 ); 위 item들의 좌표값을 그...

QGraphicsItem, QGraphicsScene 및 QGraphicsView 이해하기

이미지
1. 개념 이해 여기서는 QGraphicsItem, QGraphicsScene 및 QGraphicsView 에 대해 알아보자. Qt에서 제공하는 Graphic관련 중요 요소는 다음 3가지가 있다.   (1) QGraphicsItem : item   (2) QGraphicsScene : scene   (3) QGraphicsView : view The usual workflow is to first create a couple of items, then add them to a scene, and finally set that scene on a view. 위의 3가지 요소를 활용한 일반적인 그래픽 작업 과정은 다음과 같다.   (1) QGraphicsItem을 활용하여 필요한 item을 생성한다.   (2) 생성된 item을 QGraphicsScene에 추가한다.   (3) 마지막으로 QGraphicsScene을 QGraphicsView 에 셋팅한다. Graphic 기능을 사용하기 위해 먼저 QGraphicsItem, QGraphicsScene 및 QGraphicsView에 대해 알아보자. 아래 그림은 그래픽의 3가지 요소에 대한 관계를 이해하는데 도움이된다. 여기서 보면 Scene은 전체 그림을 담는 큰 도화지와 같고 item은 도화지 위에 그려진 여러가지 그림이다. 그리고 view는 우리가 그림을 볼때 우리의 눈이 집중해서 보고 있는 도화지의 한 부분이라고 이해할 수 있을 것이다. 따라서 item은 scene에 add하여야 하며 다 그린 scene은 view와 연결을 해주어야 실제 화면에 표시되는 것이다. 따라서, scene은 item을 위치와 item의 변형 등을 정확하게 표시해주는 역할을 수행한다. 또한 어떤 event에 대해 어떤 item들이 영향을 받는지를 알려주는 역할도 수행한다. 2. QGraphicsItem생성하고 Scene 및 View와 연결하기 Scene에 표시되는 모든 item들은 QGr...

QGraphicsItem 들 사이를 Parent-children 관계로 구성하기

이미지
이미 아는 얘기지만 Qt5에서는 다양한 QGraphicsItem들을 제공한다. 이러한 item 들은 개별적으로 사용할 수 도 있지만 좀 더 복잡한 item을 만들기 위해서는 parent-children 관계를 구성하여 새로운 QGraphicsItem을 만들 수 있다. 이 방법은 매우 유용하고 강력한 기능들을 제공한다. 1. Parent-children 관계 이해하기 아래 그림을 보면 Fruit이 parent이고 Apple, pear 등은 children 이다. C++에서 보면 클래스 상속의 개념이 parent-children 개념이다. Qt5도 기본적으로 C++언어를 사용하므로 클래스 상속 개념은 동일하게 적용된다. 그러면 이런 관계를 사용할 경우 어떤 이점이 있을까? 부모 클래스가 가지고 있는 모든 능력을 자식클래스가 동등하게 사용할 수 있다는 것이 가장 큰 장점이라 할 수 있다.  즉 Fruit이 맛이 좋다면 Apple, pear 등의 맛도 좋다는 것이다. 그러나 자식클래스는 또한 자신만의 특징을 별도로 가질 수도 있다. Fruit 색이 하얀색이더라도 자식인 Apple은 빨간색을 가질 수 있다는 것이다.  2. QGrahpicsItem에 적용해보기 QGrahpicsItem에 적용해보기 위해 기본 프로젝트를 하나 생성하고 QGrahpicsItem클래스를 상속할 클래스를 하나 추가한다. 본 과정의 상세 설명은  여기 를 참조하자. QGrahpicsItem을 직접 상속하지 말고 QGrahpicsRectItem를 상속하도록 하자. 그러면 상속된 클래스의 선언부는 다음과 같이 될 것이다. 아래에서 보면 public 속성에 parent를 선언하였다.  여기서 parent가 될 변수이다. pressurizer.h #ifndef PRESSURIZER_H #define PRESSURIZER_H #include <QGraphicsRectItem> class Pressurizer : public QGraphi...

Qt5 설치하기

이미지
1. Qt5 개요 Qt5는 C++과 함께 사용하는 GUI를 개발할 수 있는 훌륭한 오픈소스 크로스플랫폼 프레임워크이다. GUI개발과 더불어 threads, networking 관련된 프로그램도 개발할 수 있다. 가장 큰 장점은 오픈소스이므로 모든 사용자가 무료로 사용할 수 있다는 것이다.  본 블로그의 모든 Qt5 관련 코딩은 Qt 5.9.3 및 Qt Creator를 사용하여 작성되고 컴파일될 것이다. 2. Qt Creator 다운로드하기 (1)  https://www.qt.io/download  로 접속한다. (2) 아래 창에서 Go open source로 이동한다. (3) (2)에 따라 페이지 이동 후 아래로 쭈욱 내려오면 다음과 같은 화면이 나타나고 Download Qt online installer를 클릭한다. (4) 아래에서 Download 버튼을 클릭한다. 다운로드가 완료되면 실행하여 Qt5를 설치한다. 3. Qt5 처음 실행해보기 (1) 설치가 완료된 후 Qt5를 실행해보자. 그러면 아래와 같은 창이 나타날 것이다. (2) 여기서 New Project 버튼을 눌러 새로운 프로젝트를 만들어보자. (3) 아래의 창과 같이 Appication, Qt Widgets Application을 선택하고 Choose 하자 (4) Name에 helloQt 를 입력하고 Next하자 (5) 컴파일러를 MinGW 32bit로 설정하고 Next 하자. (6) 기본값으로 두고 Next 하자. (7) 기본값으로 두고 Finish 하자. (8) 아래와 같은 시작 화면이 나타난다. (9) 아래에서 파랑색 부분 버튼을 클릭하여 컴파일 및 실행해보자. (10) 아래와 같은 빈 화면이 하나 뜨는 것을 확인할 수 있다.  4. 정리하기 Qt5를 설치하고 기본상태에서 컴파일하여 빈 창을 띄워보았다. 앞으로 이 빈 창을 점점 알차게 멋지게 꾸미게 될 것이다.

Qt5 - QGraphicsItem 을 사용한 나만의 Graphic Item 만들기

이미지
본 글에서는 Qt5에서 사용할 수 있는 QGraphicsItem 관련 클래스들을 알아보고 이 들을 활용하여 자신만의 Graphic Item을 만들어 본다. 1. QGraphicsItem 클래스 알아보기 Qt5의 모든 GraphicsItem의 부모 클래스로서 아래와 같은 Graphic Item들이 상속을 받는다. QGraphicsEllipseItem : 원 및 타원을 그린다. QGraphicsLineItem : 선을 그린다. QGraphicsPathItem : 임의의 그래픽 path 만든다. QGraphicsPixmapItem : pixmap을 그린다. 이미지을 처리 QGraphicsPolygonItem : polygon을 그린다. QGraphicsRectItem : 사각형을 그린다. QGraphicsSimpleTextItem : Text를 그린다. QGraphicsTextItem : Text를 그린다. QGraphicsSimpleTextItem에 비해 자원이 많이 소요되므로 일반적으로 QGraphicsSimpleTextItem을 사용한다. 위에서 열거한 그래픽 관련 클래스를 상속받아 나만의 그래픽 item을 만들 수 있다. 2. 나만의 Graphic Item 만들기 2-1. New project 시작하기 (1) 아래와 같이 선택한 후 Choose를 클릭한다. (2) Name에 "MyOwnItem"을 입력. 아무거나 입력해도 됨. (3) 컴파일러를 선택하는 Kit로 MingW 32bit을 선택한다. Qt 5.9 에는 기본적으로 설치가 된다. (4) 아래는 아무 수정없이 기본값을 유지. Next (5) 기본값 유지 Finish (6) 아래와 같은 기본 프로젝트가 완성되었다. (7) 아래에서 파란색 부분을 클릭하면 컴파일 작업이 진행되고 마지막으로 프로그램이 실행된다. 이제 기본골격이 갖추어졌으니 본격적으로 자신만의 그래픽 item을 만들어 보자. 2-2. 나만의 item 클래스 추가하기 (1) 아래 파랑색 부분에서 마우스 우클릭을 한 후 ...