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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Тормоза QGraphicsView при ScrollHandDrag mode.  (Прочитано 5078 раз)
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« : Январь 15, 2009, 18:09 »

Пытаюсь понять, как можно сделать перетаскивание сцены с помощью мышки. Пока даже в таком простейшем примере получаются тормоза (особенно после разворачивания окна на весь экран):
Код
C++ (Qt)
#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
 
int main(int argc, char *argv[]) {
 QApplication app(argc, argv);
 QGraphicsScene *scene = new QGraphicsScene();
 QPen pen(Qt::black, 2.0);
 scene->addRect(0, 0, 400, 300, pen);
 scene->addEllipse(10, 10, 380, 280, pen);
 scene->addLine(0, 0, 400, 300, pen);
 scene->addLine(400, 0, 0, 300, pen);
 QGraphicsView *view = new QGraphicsView();
 view->setDragMode(QGraphicsView::ScrollHandDrag);
 view->setRenderHint(QPainter::Antialiasing, true);
 view->setSceneRect(-1000, -1000, 2000, 2000);
 view->setScene(scene);                                
 view->scale(3, 3);
 view->show();
 return app.exec();
}
 

Что я делаю не так?
Кстати, точно такая же проблема у меня получается если в примере 40000 chips выставить режим ScrollHandDrag.
Записан
Khs
Гость
« Ответ #1 : Январь 15, 2009, 19:50 »

Цитировать
Пытаюсь понять, как можно сделать перетаскивание сцены с помощью мышки

На самом деле происходит не перетаскивание сцены, а прокрутка представления относительно позиции зажатого курсора, если можно так сказать.

Цитировать
Пока даже в таком простейшем примере получаются тормоза (особенно после разворачивания окна на весь экран)

У меня этот код работает, не вижу никаких тормозов, все что требуется от
view->setDragMode(QGraphicsView::ScrollHandDrag);, выполняется.

Возможно я чего-то неправильно понял.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #2 : Январь 15, 2009, 20:17 »

Цитировать
Пока даже в таком простейшем примере получаются тормоза (особенно после разворачивания окна на весь экран)
У меня этот код работает, не вижу никаких тормозов, все что требуется от
view->setDragMode(QGraphicsView::ScrollHandDrag);, выполняется.
Возможно я чего-то неправильно понял.
Хм.. Похоже, что зависит от видеокарты и/или драйверов. Попробовал на ноутбуке со встроенным видео и работает в общем-то нормально. А вот на компе с NVIDIA 7600GS и 181.20_geforce_winxp_32bit_english_whql почему-то тормозит... Причем как-то странно тормозит, в основном только когда по диагонали тянуть...

Похоже оно все-таки пытается какой-то скроллинг системный задействовать, т.к. судя по показаниям Process Explorer время процессора в системных вызовах практически все тратится...

Еще обнаружил, что установка флага setViewportUpdateMode(QGraphicsView::FullViewportUpdate) решает проблему, т.к. в этом случае перерисовывается все внутри QGraphicsView.. Как-то не оптимально получается...
Записан
BaltikS
Гость
« Ответ #3 : Январь 15, 2009, 21:29 »

Подобная проблема уже обсуждалась, но решена не была. Полагаю, что дело в кривых драйверах или кривой реализации....
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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