2016-09-01 4 views
-1

QGraphicsTextItem을 자식으로 가지고있는 QGraphicsItem 요소 (하위 클래스는 QGraphicsItem)가 있습니다.QGraphicsItem을 무한 반복 칠하는 것을 피하십시오

의 메서드를 무한히 호출하는 것이 문제입니다.

void rectangle_element::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    painter->drawRoundedRect(-10, -10, 80, 40, 5, 5); 
    painter->drawStaticText(-10, -10, QStaticText("some text")); 
    text_item->setPlainText("more text"); 
} 

내가 QGraphicsItem::CacheMode::NoCache 이외의 플래그 setCacheMode을 사용할 수 없습니다 : 여기

QGraphicsTextItemQGraphicsItem 요소에서 페인트 방법입니다.

Qt 5.6을 사용하고 있습니다.

UPDATE :

  • text_item는 클래스의 멤버이며이 초기화 목록에 초기화됩니다.
+2

페인트 할 때마다 왜 아이를 만듭니 까? Constuctor에서 자식 만들기 – Fabio

+0

@Fabio - 질문을 업데이트했습니다. 'QGraphicsTextItem'은 calss의 멤버입니다. – mtb

+1

다시 말하지만, 항목을 칠 때마다 왜 하위 텍스트를 설정해야합니까? – Fabio

답변

2

당신은 다시 따라서 무한 루프를 만들고, 부모의 다시 그리기를 트리거 것 같다 부모 항목의 paint() 방법 text_item의 텍스트를 설정합니다. 일반적으로 페인트 작업 중 항목을 변경하는 것은 좋지 않습니다. paint() 메서드는 높은 빈도로 호출 될 수 있습니다.

아마도 사용자 상호 작용처럼 슬롯 변경을 호출하는 문자 변경 text_item이 필요합니다. 이것은 텍스트를 설정해야하는 지점입니다. 텍스트 자체의 그림은 QGraphicsTextItem에 의해 처리됩니다.

관련 문제