Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: navrocky от Апрель 25, 2013, 09:55



Название: QGraphicsItem и определение области, которую надо обновить
Отправлено: navrocky от Апрель 25, 2013, 09:55
Делаю нечто аналогичное редактору дорожек в видеоредакторах. Использую для этого QGraphicsScene. Временную линейку хочу сделать одним длинным итемом (наследник QGraphicsRectItem). И возникла проблема узнать область реальной перерисовки для итема, т.к. линейка может быть очень длинной (дни, недели..., в пикселях >100000).

Гуглил и этот форум в том числе, не нашел решения как можно выудить область обновления для итема аналогично QPaintEvent::region() ?

Сейчас думаю тупо в лоб определять видимую область графической сцены и мапить ее в координаты итема.. но это как-то не очень красивое решение (ведь обновиться может не вся видимая часть итема и нет смысла заниматься перерисовками того что не изменилось).

Что посоветуете?


Название: Re: QGraphicsItem и определение области, которую надо обновить
Отправлено: GreatSnake от Апрель 25, 2013, 11:11
Имхо, такие вещи нужно делать в QGraphicsScene::drawBackground().

И возникла проблема узнать область реальной перерисовки для итема
Код
C++ (Qt)
QRegion QPainter::clipRegion () const


Название: Re: QGraphicsItem и определение области, которую надо обновить
Отправлено: navrocky от Апрель 25, 2013, 11:20
QPainter::clipRegion () - возвращает вседа что-то типа QRectF(-1153,-670 0x0) при любых перерисовках

А вот за QGraphicsScene::drawBackground() спасибо, это лучше вариант, чем я начал городить.