Избегайте QGraphicsItem с детьми от бесконечной перекраски

у меня есть 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 является членом класса и инициализируется в списке инициализации.

-1

Решение

Вы устанавливаете текст text_item в paint() метод родительского элемента, который, в свою очередь, запускает перерисовку родительского элемента, создавая таким образом бесконечный цикл. Как правило, не рекомендуется менять элементы во время операций рисования. Имейте в виду, что paint() Метод можно вызывать с высокой частотой.

Вероятно, есть какое-то событие, вызывающее необходимость изменения текста text_itemкак взаимодействие с пользователем, которое в свою очередь вызывает слот. Это точка, где вы должны установить текст. Рисование самого текста обрабатывается QGraphicsTextItem,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]