Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: TheBlade от Декабрь 11, 2010, 14:44



Название: Обрезка Scene и отображение в View
Отправлено: 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 в другое место, или какое-нибудь другое решение, спасибо.


Название: Re: Обрезка Scene и отображение в View
Отправлено: alexman от Декабрь 11, 2010, 15:15
QGraphicsView::fitInView вызываете?


Название: Re: Обрезка Scene и отображение в View
Отправлено: TheBlade от Декабрь 11, 2010, 15:36
нет, это ведь функция которая стремиться показать весь QRect который её передан, мне не нужно менять масштаб, мне нужно обрезать пустые части по прямоугольнику, а View мне все портит, например:
после обрезки сцена стала QRectF(25,25,100,100) соответственно площадь view станет QRect(0,0,125,125), да объекты она все покажет но в левом верхнем углу будет много пустого места


Название: Re: Обрезка Scene и отображение в View
Отправлено: alexman от Декабрь 11, 2010, 15:48
Так вызывайте fitInView с параметрами Qt::KeepAspectRatio, Qt::KeepAspectRatioByExpanding для сохранения пропорций.


Название: Re: Обрезка Scene и отображение в View
Отправлено: TheBlade от Декабрь 11, 2010, 15:50
Сорри ошибся, похоже как раз сцена у меня является источником проблемы. Наверно что-то не так с алгоритмом. Все равно спасибо.


Название: Re: Обрезка Scene и отображение в View
Отправлено: mal от Декабрь 14, 2010, 17:16
не понимаю зачем резать сцену, если на это нет особых причин.
а у QGraphicsView есть метод centerOn - посмотрите на него.