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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обрезка Scene и отображение в View  (Прочитано 3028 раз)
TheBlade
Гость
« : Декабрь 11, 2010, 14:44 »

Я написал функцию, которая обрезает неиспользуемые части сцены
Код:
void Scene::adjustSceneRect()
{
    QList <QGraphicsItem *> list = items();
    if (list.count() < 2)
        return;
    qreal left = list[0]->scenePos().x(),
          top = list[0]->scenePos().y(),
          right = list[0]->scenePos().x(),
          bottom = list[0]->scenePos().y();
    for (int i = 1; i < list.count(); i++)
    {
        if (list[i]->scenePos().x() < left)
            left = list[i]->scenePos().x();
        if (list[i]->scenePos().y() < top)
            top = list[i]->scenePos().y();
        if (list[i]->scenePos().x() > right)
            right = list[i]->scenePos().x();
        if (list[i]->scenePos().y() > bottom)
            bottom = list[i]->scenePos().y();
    }
    setSceneRect(left - 80,top - 80,abs(right)+abs(left)+160,abs(top)+abs(bottom)+160);
}
Но отображение в View постоянно берет за точку отсчета точку - (0,0) (как собственно и написанно в доке), и соответствено, не смотря на обрезку показывает пустую область. Сдвигать объекты на сцене я категорически против, если способ перенести начало координат View в другое место, или какое-нибудь другое решение, спасибо.
Записан
alexman
Гость
« Ответ #1 : Декабрь 11, 2010, 15:15 »

QGraphicsView::fitInView вызываете?
Записан
TheBlade
Гость
« Ответ #2 : Декабрь 11, 2010, 15:36 »

нет, это ведь функция которая стремиться показать весь QRect который её передан, мне не нужно менять масштаб, мне нужно обрезать пустые части по прямоугольнику, а View мне все портит, например:
после обрезки сцена стала QRectF(25,25,100,100) соответственно площадь view станет QRect(0,0,125,125), да объекты она все покажет но в левом верхнем углу будет много пустого места
Записан
alexman
Гость
« Ответ #3 : Декабрь 11, 2010, 15:48 »

Так вызывайте fitInView с параметрами Qt::KeepAspectRatio, Qt::KeepAspectRatioByExpanding для сохранения пропорций.
Записан
TheBlade
Гость
« Ответ #4 : Декабрь 11, 2010, 15:50 »

Сорри ошибся, похоже как раз сцена у меня является источником проблемы. Наверно что-то не так с алгоритмом. Все равно спасибо.
Записан
mal
Гость
« Ответ #5 : Декабрь 14, 2010, 17:16 »

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


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