у меня есть QGraphicsItem
элемент (подкласс QGraphicsItem
) которая имеет как ребенок QGraphicsTextItem
,
Проблема в том, что paint(...)
метод QGraphicsItem
называется бесконечно.
Вот метод рисования от моего QGraphicsItem
элемент с QGraphicsTextItem
:
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" );
}
Я не могу использовать setCacheMode
с другим флагом, чем QGraphicsItem::CacheMode::NoCache
,
Я использую Qt 5.6.
ОБНОВИТЬ:
text_item
является членом класса и инициализируется в списке инициализации.Вы устанавливаете текст text_item
в paint()
метод родительского элемента, который, в свою очередь, запускает перерисовку родительского элемента, создавая таким образом бесконечный цикл. Как правило, не рекомендуется менять элементы во время операций рисования. Имейте в виду, что paint()
Метод можно вызывать с высокой частотой.
Вероятно, есть какое-то событие, вызывающее необходимость изменения текста text_item
как взаимодействие с пользователем, которое в свою очередь вызывает слот. Это точка, где вы должны установить текст. Рисование самого текста обрабатывается QGraphicsTextItem
,
Других решений пока нет …