티스토리 뷰

C | C++

QGraphicsItem 클래스(QT C++)

야라바 2024. 3. 14. 12:46
728x90

QGraphicsItem 클래스는 QGraphicsScene 클래스에서(QGraphicsScene  클래스(QT C++) 참조) 사용하는 모든 그래픽 요소들이 상속하는 기본 클래스이다. QAbstractGraphicsShapeItem를 통해서 다음과 같은 클래스들이 상속받는다.

  • QGraphicsEllipseItem
  • QGraphicsLineItem
  • QGraphicsPathItem
  • QGraphicsPixmapItem
  • QGraphicsPolygonItem
  • QGraphicsRectItem
  • QGraphicsSimpleTextItem
  • QGraphicsTextItem

 

참조 링크 : https://doc.qt.io/qt-5/qgraphicsitem.html

 

class MyItem : public QGraphicsItem
{
public:
    QRectF boundingRect() const override
    {
        qreal penWidth = 4;
        return QRectF(-5 - (penWidth / 2), -5 - (penWidth / 2),
                      10 + penWidth, 10 + penWidth);
    }

    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
               QWidget *widget) override
    {
        painter->drawRoundedRect(-5, -5, 10, 10, 5, 5);
    }
};

 

자신만의 그래픽 요소를 만들고 싶다면 위의 예제 코드처럼 QGraphicsItem를 상속받는 클래스를 만들고 boundingRect()와 paint() 함수를 재정의 하여 작성하면 된다. 재정의 가능 함수는 다음과 같다.

void advance(int phase) : 시작 시 0, 다음에 1로 씬에서 호출된다.

QRectF boundingRect() : 항목의 영역 정의를 위해서 호출된다.

bool contains(const QPointF &point) : 지정한 좌표에 속하는지 확인하기 위해 뷰에서 호출된다.

void paint(QPainter *painter, QStyleOptionGraphicsItem *option, QWidget *widget = 0) : 뷰에서 출력으로 호출

 

주요 함수와 슬롯들은 다음과 같다.

 

bool isEnabled()

void setEnabled(bool enabled) : 사용 가능 여부 조회 및 설정. false면 선택/입력/이벤트를 받을 수 없다.

bool isActive() : 활성화 여부 조회. 상위 씬의 활성화되어야 항목도 활성화

QGraphicsItem::GraphicsItemFlags flags()

void setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true)
void setFlags(QGraphicsItem::GraphicsItemFlags flags)
 : 항목의 플래그 조회 및 설정. 
    기본값은 없고, QGraphicsItem::ItemIsMovable, ItemIsSelectable, ItemIsFocusable, ItemIsFocusable,
    ItemClipsChildrenToShape, ItemIgnoresTransformations, ItemIgnoresParentOpacity,
    ItemDoesntPropagateOpacityToChildren, ItemStacksBehindParent, ItemUsesExtendedStyleOption,
    ItemHasNoContents, ItemSendsGeometryChanges, ItemAcceptsInputMethod, ItemNegativeZStacksBehindParent,
    ItemIsPanel, ItemSendsScenePositionChanges, ItemContainsChildrenInShape

bool isSelected()

void setSelected(bool selected) : 선택 여부 조회 및 설정. 보임/사용가능/선택가능(플래그) 상태의 항목만 선택 가능

bool acceptDrops()

void setAcceptDrops(bool on) : 항목이 끌어다 놓기 이벤트를 받는지 여부 조회 및 설정. 

bool acceptTouchEvents()

void setAcceptTouchEvents(bool enabled) : 항목이 터치 이벤트를 받는지 여부 조회 및 설정. 

Qt::MouseButtons acceptedMouseButtons()

void setAcceptedMouseButtons(Qt::MouseButtons buttons) : 어떤 마우스 이벤트를 받는지 조회 및 설정. 

QList<QGraphicsItem *> childItems()

QGraphicsItem *parentItem()

void setParentItem(QGraphicsItem *newParent)

qreal zValue()

void setZValue(qreal z)

void stackBefore(const QGraphicsItem *sibling) : 부모, 자식 항목, 순서 조회 및 바꾸기.

QCursor cursor()
bool hasCursor()

void setCursor(const QCursor &cursor)

void unsetCursor() : 커서 조회 및 설정. 

QVariant data(int key)

void setData(int key, const QVariant &value) : 키 값으로 사용자 데이터 조회 및 설정. 

bool isVisible()

void show()

void hide() 

qreal opacity()

void setOpacity(qreal opacity)

void setVisible(bool visible) : 보이기/숨기기, 투명도(0.0~1.0, 0.0이 투명) 조회 및 설정

qreal x()

qreal y()

QPointF pos()

void setX(qreal x)

void setY(qreal y)

void setPos(const QPointF &pos)

void setPos(qreal x, qreal y) : 위치 조회 및 설정. 

qreal scale()

void setScale(qreal factor) : 배율 조회 및 설정. 

qreal rotation()

void setRotation(qreal angle) : 회전값(시계방향) 조회 및 설정. 

 

728x90

'C | C++' 카테고리의 다른 글

QVariant 클래스(QT C++)  (0) 2024.03.19
QSettings 클래스(QT C++)  (0) 2024.03.18
QGraphicsScene 클래스(QT C++)  (0) 2024.03.13
QGraphicsView 클래스(QT C++)  (0) 2024.03.13
QTableView 클래스(QT C++)  (0) 2024.03.08