Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vitalka от Февраль 28, 2012, 12:21



Название: QGraphicsLayout [РЕШЕНО]
Отправлено: vitalka от Февраль 28, 2012, 12:21
Есть класс, который наследуется от QGraphicsLayout. Возникла проблема в изменении размеров итемов Layoutа. То есть размеры самих итемов я меняю, но Layout их не использует, а берет старые из кэша. В какой то мере эту проблему мне удалось обойти, подставляя в классе нужные размеры, однако оказалось что в некоторых случаях итемы с новыми размерами перерисовываются некорректно, так как почему то используются старые прямоугольники.
Может кто подскажет, как в QGraphicsLayout корректно сообщить что размеры итемов уже недействительны и пора их менять на новые?


Название: Re: QGraphicsLayout
Отправлено: Bepec от Февраль 28, 2012, 12:23
Какой нибудь reset или update или repaint?

Честно - незнаю :)


Название: Re: QGraphicsLayout
Отправлено: vitalka от Февраль 28, 2012, 12:26
Какой нибудь reset или update или repaint?
Пробовал, не помогло. (


Название: Re: QGraphicsLayout
Отправлено: vitalka от Февраль 28, 2012, 12:32
Я так полагаю, что дело не в перерисовке, а в кэше, который хранит размеры итемов. Вот никак не могу понять ка этот кэш сбросить.


Название: Re: QGraphicsLayout
Отправлено: _OLEGator_ от Февраль 28, 2012, 14:37
Попробуйте вызывать в месте изменения размера айтема:
Код
C++ (Qt)
void QGraphicsItem::prepareGeometryChange () [protected]


Название: Re: QGraphicsLayout
Отправлено: vitalka от Февраль 29, 2012, 05:14
Попробуйте вызывать в месте изменения размера айтема:
Код
C++ (Qt)
void QGraphicsItem::prepareGeometryChange () [protected]
Нет, это не помогло.

Однако вопрос решился случайно.
Я после изменения параметров вызывал
Код:
layout->updateGeometry();
update(rect());
как только удалил update(rect()); сразу все начало работать нормально. Странно....