2013-03-28 3 views
2

QGraphicsTextItem을 추가하고 배경색을 변경하고 싶습니다. 이 말은 내가 텍스트를 포함하는 boundingRect가 특정 색상을 가지길 원한다는 뜻입니다. 이 작업을 수행하는 한 가지 방법은 QGraphicsRectItem을 만들어 텍스트 위에 놓는 것입니다.하지만이 작업을 수행 할 다른 방법이 있는지 궁금합니다.QGraphicsTextItem의 배경을 변경하는 방법?

도움 주셔서 감사합니다.

답변

7

나는 예를 들어, QGraphicsTextItem 하위 클래스 것입니다 : 당신은, 예를 들어과 배경을 채울 수 있도록

class QGraphicsTextItemWithBackgroundColorOfMyChoosing : public QGraphicsTextItem 
{ 
    public: 
     QGraphicsTextItemWithBackgroundColorOfMyChoosing(const QString &text) : 
      QGraphicsTextItem(text) { } 

     void paint(QPainter *painter, const QStyleOptionGraphicsItem *o, QWidget *w) { 
      painter->setBrush(Qt::red); 
      painter->drawRect(boundingRect()); 
      QGraphicsTextItem::paint(painter, o, w); 
     } 
}; 
+0

답변 해 주셔서 감사합니다. 그게 효과가 있지만 덜 복잡한 것을 찾고있었습니다. 다른 선택이 없다면 나는 당신을 사용할 것입니다. – aarelovich

+0

이것은 매우 일반적인 일이며, 그것에 대해 너무 복잡한 것은 무엇입니까? – Chris

+0

나는 당신에 동의합니다. 그러나 완전히 새로운 클래스를 만들어야합니다. 나는 그것을 전에했다. 하지만 코드가 훨씬 적어 QGraphicsScene에 텍스트와 정사각형을 추가하면 동일한 결과가 나타납니다 (표를 보여 주기만하면됩니다). 그래도 고마워. e.d의 답변과 같은 것을 찾고 있었지만 예상대로 작동하지 않았습니다. – aarelovich

3

당신은, setHtml()를 사용하여 QGraphicsTextItem에 HTML을 작성할 수 있습니다

item->setHtml("<div style='background-color:#666666;'>" + yourText + "</div>"); 
+0

이것은 경계 상자 전체가 아니라 텍스트 주위 만 색이 칠해져 있기 때문에 예상했던대로 작동하지 않았습니다. 하지만 그럴만 한 가치가있었습니다. 백그라운드에서 사각형을 그렸습니다. 고맙습니다! – aarelovich

1

너무 작거나 너무 늦을 수도 있지만 다음을 수행하면 하위 클래스를 작성하거나 다시 구현하지 않아도됩니다.

item->setHtml(QString("<div style='background:rgba(255, 255, 255, 100%);'>" + QString("put your text here") + QString("</div>")); 
관련 문제