Название: Пробемы с 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)).
|