Избегайте 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,

Другие вопросы по тегам