2013-03-28 6 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

Вы можете написать HTML в QGraphicsTextItem с помощью setHtml(), так что вы можете заполнить фон, например,

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>")); 
Смежные вопросы