Russian Qt Forum
Ноябрь 26, 2024, 13:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пробемы с QScrollArea  (Прочитано 7932 раз)
Ryhel
Гость
« : Февраль 23, 2007, 14:49 »

Для отображения достаточно больших изображений с возможностью прокрутки воспользовался классом QScrollArea. Устанавливаю в QScrollArea::setWidget свой виджет - субкласс от QWidget. в котором рисую с помощью QPainter в QWidget::paintEvent(). При скролле появляются неприятные эффекты на границах видимой отласти - после перемещения виджета кратковременно становится виден пустой прямоугольник, который затем  заполняется нужным изображением. Не сталкивался ли кто-нибудь с подобной проблемой? Есть ли способы ее решения? Qt-4.2.2-x11-opensource
Записан
yurror
Гость
« Ответ #1 : Февраль 26, 2007, 15:30 »

В конструкторе своего класса setBackgroundRole(QPalette::Base);
Записан
Ryhel
Гость
« Ответ #2 : Февраль 27, 2007, 17:05 »

setBackgroundRole(QPalette::Base) в конструкторе дочернего виджета не помогло. Господа, помогите разобраться, в чем дело - ведь QLabel скроллится файн - плавно...
Записан
libli
Новичок

Offline Offline

Сообщений: 1


Просмотр профиля
« Ответ #3 : Февраль 27, 2007, 18:01 »

попробуй
Qt::WA_OpaquePaintEvent   
Qt::WA_NoSystemBackground
Записан
Lion
Гость
« Ответ #4 : Февраль 27, 2007, 21:45 »

Здесь скорее всего проблема в скорости отрисовки, возможно ты заново перерисовываешь весь виджет, вместо области указанной в QPainEvent::rect().
Записан
Ryhel
Гость
« Ответ #5 : Февраль 28, 2007, 00:36 »

Что касается QPainEvent::rect() - то перерисовываю я именно его и со скоростью отрисовки проблем вроде бы нет...
Qt::WA_OpaquePaintEvent  и Qt::WA_NoSystemBackground приводят к тому, что области по краям перестают заполняться я так понимаю QPalette::Base, paintEvent() рисует сразу поверх старого изображения и вместо мерцания при скролле происходит смазывание этих областей. Кстати, imageviewer из examples/widgets обладает той же особенностью - мерцание по краям при скролле + мерцание вокруг окон, находящихся поверх scrollarea. хотя на быстрых машинах этого почти не заметно...
Записан
Ryhel
Гость
« Ответ #6 : Март 03, 2007, 13:31 »

Проблему пока не решил)
Записан
Djavdet
Гость
« Ответ #7 : Ноябрь 28, 2008, 11:32 »

а теперь решил???!!!!!! если да то скажи как? я столкнулся с точно такой же проблемой
Записан
Djavdet
Гость
« Ответ #8 : Ноябрь 28, 2008, 12:24 »

Пробовал юзать Q3ScrollView - переопределял paintEvent, рисовал на this->vieport() - все нормально работает, без глюков, но мне нельзя его юзать, а при использовании QScrollArea возникают описанные выше глюки
Записан
Ryhel
Гость
« Ответ #9 : Ноябрь 29, 2008, 11:56 »

Я воспользовался QGraphicsView, вроде порядок
Записан
Djavdet
Гость
« Ответ #10 : Декабрь 01, 2008, 08:46 »

опиши пожалуйста схему действий, что  где переопределять все такое
Записан
Ryhel
Гость
« Ответ #11 : Декабрь 02, 2008, 01:30 »

В общем это будет тот же QScrollArea, для отрисовки фона достаточно переопределить метод drawBackground, для тюнинга можно попробовать различные комбинации опций cacheMode и viewportUpdateMode. Ну а если понадобится дополнительный функционал - QGraphicsView/QGraphicsScene хорошо описаны в Qt Assistant.
Записан
Djavdet
Гость
« Ответ #12 : Декабрь 11, 2008, 17:08 »

переопределил drawBackGround()  у QGraphicsView или QGraphicsScene ?   , я попробовал у QGraphicsView переопределить - никакой реакции - экран белый, можешь поподробнее рассказать, а ??!!!!!!
« Последнее редактирование: Декабрь 12, 2008, 15:16 от Djavdet » Записан
Ryhel
Гость
« Ответ #13 : Декабрь 13, 2008, 00:41 »

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


Страница сгенерирована за 0.212 секунд. Запросов: 22.