Название: Простейшая вещь завела в тупик(sceneRect) Отправлено: Morkonwen от Ноябрь 06, 2010, 13:27 только начал изучать библиотеку, уже вижу, что она реализует за тебя очень и очень многие вещи, но не могу разобраться в следующем
как бы я ни менял setSceneRect , реальная область отображения упорно включает в себя нарисованные линии Причем я могу сделать облатсь видимоти больше, чем нужна для включения линий, но не меньше.(полос прокрутки вообще не появляется) Код: qte2::qte2(QWidget *parent, Qt::WFlags flags) Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: marbius от Ноябрь 06, 2010, 13:43 QGraphicsView::sceneRect содержит область сцены, которую визуализирует QGrapphicsView
QGraphicsScene::sceneRect содержит область, ограничивающую объекты сцены. Эта область может (автоматически) расширяться при добавлении/перемещении объектов сцены, но никогда не сжимается как-то так... а у Вас какая задача-то? Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: Morkonwen от Ноябрь 06, 2010, 13:48 просто нарисовать кусочек сцены!
заметте я меняю QGraphicsView::sceneRect ! очень странно Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: Sancho_s_rancho от Ноябрь 06, 2010, 13:53 просто нарисовать кусочек сцены! void QGraphicsView::centerOn() + void QGraphicsView::fitInView(); заметте я меняю QGraphicsView::sceneRect ! очень странно Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: Morkonwen от Ноябрь 07, 2010, 00:13 Цитировать void QGraphicsView::centerOn() + void QGraphicsView::fitInView(); Спасибо, так получше, но все равно область отображения ведет себя каким то неоднозначным и неочевидным образом. Может надо какуюто загадочную настройку класса поменять, что бы он не "делал как лучше"? Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: Sancho_s_rancho от Ноябрь 07, 2010, 16:30 Цитировать void QGraphicsView::centerOn() + void QGraphicsView::fitInView(); Спасибо, так получше, но все равно область отображения ведет себя каким то неоднозначным и неочевидным образом. Может надо какуюто загадочную настройку класса поменять, что бы он не "делал как лучше"? 0) Отключаю в QGraphicsView скроллбары 1) Устанавливаю границы сцены по ее содержимому. Далее их не трогаю. scene->setSceneRect(scene->itemsBoundingRect()); 2) Делаю QGraphicsView::fitInView с этими границами. И для ResizeEvent тоже пишу fitInView. 3) Если мне надо увеличить какой-либо Item, то делаю fitInView() и эти же цифирьки сохраняются для ResizeEvent . Это делается для того, чтобы пользователь, увеличивая окно, получил увеличенный Item. Как-то так. Ежели вы всерьез хотите разобраться, то рекомендую книгу http://www.amazon.com/Advanced-Qt-Programming-Creating-Development/dp/0321635906 Там достаточно подробно описываются правила игры с QGraphicsView framework. Пи.си. Книга на английском, но достаточно легком. Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: Morkonwen от Ноябрь 07, 2010, 18:07 спасибо, уже качаю!
Кстати все равно в восторге от qt вся графика моей программы заняла 20 строк, когда на windows form это было порядка 100! Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: Morkonwen от Ноябрь 08, 2010, 18:28 Такоей вопрос еще возник, Есть картинка с огромным количеством линий(как бы лист в клетку) по полю перемещается кружок. Для его перемещения использую QGraphicsItem::translate. проблема в том, что кружок на предидущем месте иногда не затирается. как быть?
Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: Morkonwen от Ноябрь 08, 2010, 19:05 Все разобрался помогла только установка режима полной перерисовки.
setViewportUpdateMode(QGraphicsView::FullViewportUpdate); Никакие "умные" и "по прямоугольникам" режимы не помогли а если задний фон не по линиям прорисовывать а сделать периодической картиной клеток будет лучше? Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: Sancho_s_rancho от Ноябрь 08, 2010, 20:08 Такоей вопрос еще возник, Есть картинка с огромным количеством линий(как бы лист в клетку) по полю перемещается кружок. Для его перемещения использую QGraphicsItem::translate. проблема в том, что кружок на предидущем месте иногда не затирается. как быть? А почему вы так не делаете:Код: QGraphicsItem *ball = new QGraphicsEllipseItem(0, 0, 20, 20); Название: Re: Простейшая вещь завела в тупик(sceneRect) Отправлено: Morkonwen от Ноябрь 08, 2010, 22:52 Такоей вопрос еще возник, Есть картинка с огромным количеством линий(как бы лист в клетку) по полю перемещается кружок. Для его перемещения использую QGraphicsItem::translate. проблема в том, что кружок на предидущем месте иногда не затирается. как быть? А почему вы так не делаете:Код: QGraphicsItem *ball = new QGraphicsEllipseItem(0, 0, 20, 20); пс важно, что анимации и таймер должны существовать глобально, например в куче, а еще я не учел, что i меняется до 199 и i/200!=1 никогда. А так все классно работает) |