Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Ryhel от Февраль 23, 2007, 14:49



Название: Пробемы с QScrollArea
Отправлено: Ryhel от Февраль 23, 2007, 14:49
Для отображения достаточно больших изображений с возможностью прокрутки воспользовался классом QScrollArea. Устанавливаю в QScrollArea::setWidget свой виджет - субкласс от QWidget. в котором рисую с помощью QPainter в QWidget::paintEvent(). При скролле появляются неприятные эффекты на границах видимой отласти - после перемещения виджета кратковременно становится виден пустой прямоугольник, который затем  заполняется нужным изображением. Не сталкивался ли кто-нибудь с подобной проблемой? Есть ли способы ее решения? Qt-4.2.2-x11-opensource


Название: Пробемы с QScrollArea
Отправлено: yurror от Февраль 26, 2007, 15:30
В конструкторе своего класса setBackgroundRole(QPalette::Base);


Название: Пробемы с QScrollArea
Отправлено: Ryhel от Февраль 27, 2007, 17:05
setBackgroundRole(QPalette::Base) в конструкторе дочернего виджета не помогло. Господа, помогите разобраться, в чем дело - ведь QLabel скроллится файн - плавно...


Название: Пробемы с QScrollArea
Отправлено: libli от Февраль 27, 2007, 18:01
попробуй
Qt::WA_OpaquePaintEvent   
Qt::WA_NoSystemBackground


Название: Пробемы с QScrollArea
Отправлено: Lion от Февраль 27, 2007, 21:45
Здесь скорее всего проблема в скорости отрисовки, возможно ты заново перерисовываешь весь виджет, вместо области указанной в QPainEvent::rect().


Название: Пробемы с QScrollArea
Отправлено: Ryhel от Февраль 28, 2007, 00:36
Что касается QPainEvent::rect() - то перерисовываю я именно его и со скоростью отрисовки проблем вроде бы нет...
Qt::WA_OpaquePaintEvent  и Qt::WA_NoSystemBackground приводят к тому, что области по краям перестают заполняться я так понимаю QPalette::Base, paintEvent() рисует сразу поверх старого изображения и вместо мерцания при скролле происходит смазывание этих областей. Кстати, imageviewer из examples/widgets обладает той же особенностью - мерцание по краям при скролле + мерцание вокруг окон, находящихся поверх scrollarea. хотя на быстрых машинах этого почти не заметно...


Название: Пробемы с QScrollArea
Отправлено: Ryhel от Март 03, 2007, 13:31
Проблему пока не решил)


Название: Re: Пробемы с QScrollArea
Отправлено: Djavdet от Ноябрь 28, 2008, 11:32
а теперь решил???!!!!!! если да то скажи как? я столкнулся с точно такой же проблемой


Название: Re: Пробемы с QScrollArea
Отправлено: Djavdet от Ноябрь 28, 2008, 12:24
Пробовал юзать Q3ScrollView - переопределял paintEvent, рисовал на this->vieport() - все нормально работает, без глюков, но мне нельзя его юзать, а при использовании QScrollArea возникают описанные выше глюки


Название: Re: Пробемы с QScrollArea
Отправлено: Ryhel от Ноябрь 29, 2008, 11:56
Я воспользовался QGraphicsView, вроде порядок


Название: Re: Пробемы с QScrollArea
Отправлено: Djavdet от Декабрь 01, 2008, 08:46
опиши пожалуйста схему действий, что  где переопределять все такое


Название: Re: Пробемы с QScrollArea
Отправлено: Ryhel от Декабрь 02, 2008, 01:30
В общем это будет тот же QScrollArea, для отрисовки фона достаточно переопределить метод drawBackground, для тюнинга можно попробовать различные комбинации опций cacheMode и viewportUpdateMode. Ну а если понадобится дополнительный функционал - QGraphicsView/QGraphicsScene хорошо описаны в Qt Assistant.


Название: Re: Пробемы с QScrollArea
Отправлено: Djavdet от Декабрь 11, 2008, 17:08
переопределил drawBackGround()  у QGraphicsView или QGraphicsScene ?   , я попробовал у QGraphicsView переопределить - никакой реакции - экран белый, можешь поподробнее рассказать, а ??!!!!!!


Название: Re: Пробемы с QScrollArea
Отправлено: Ryhel от Декабрь 13, 2008, 00:41
Перегрузки drawbackgound() для отрисовки фона достаточно. По дефолу вьюшка вызывает drawBackground() сцены, так что рисовать можно в любом из классов. Что касается прблем с выводом - в какой системе координат Вы рисуете? Упомянутые методы должны работать в системе координат сцены, то есть x и у там в логических единицах, а не в пикселях. Подробнее почитать об этом можно в Qt Assistant в разделе Graphics View (qthelp://com.trolltech.qt.443/qdoc/graphicsview.html (http://qthelp://com.trolltech.qt.443/qdoc/graphicsview.html)).