LINUX.ORG.RU

Помогите побороть QGraphicsScene

 , ,


0

4

Доброго времени суток вам, лорчане.
Решил тут на выходных потыкать графику в Qt (QT_MAJOR_VERSION, 4), и столкнулся со следующей проблемой.
В общем, есть окно с кнопочками и view-элементом, который унаследован от QGraphicsView и переопределяет:

void DrawArea::resizeEvent(QResizeEvent *evnt)
{
    if(scene()){
        scene()->setSceneRect(QRect(QPoint(-evnt->size().width()/2,-evnt->size().height()/2),evnt->size()));
    }
    fitInView(scene()->sceneRect(),Qt::KeepAspectRatio);
    QGraphicsView::resizeEvent(evnt);
}
К нему прикрепляется сцена с различными QGraphicsItem. Определяется все это так:
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),  ui(new Ui::MainWindow){
    ui->setupUi(this);
     scene= new QGraphicsScene(ui->area);
     ui->area->scale(1,-1);
     arc *obj1=new arc();
     obj1->setX(200);obj1->setY(200);
     obj1->setSize(11);
     obj1->setSpeed(1);
     obj1->setFlag(QGraphicsItem::ItemIsMovable);
     scene->addItem(obj1);
     ui -> area -> setRenderHints ( QPainter :: Antialiasing
             |  QPainter :: SmoothPixmapTransform
             |  QPainter :: TextAntialiasing );
     ui->area->setScene(scene);
     ui->area->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
     ui->area->setCacheMode(QGraphicsView::CacheBackground);
     ui->area->setInteractive(true);
}
Собственно, хочу сцену растянуть на весь view. И что бы при ресайзе сцена так же ресайзила свой scenRect.
Проблема в том, что размеры сцены не соответствуют размерам виджета: сцена по сути ограничена лишь объектами, как-будто setSceneRect() не выполняется, хотя это не так. Прошу помочь, сам уже не знаю в чем может быть дело... Заранее благодарен:)

★★★★

Мне кажется scene()->setSceneRect() здесь лишнее. Достаточно должно быть одного fitInView().

Dendy ★★★★★ ()
Ответ на: комментарий от Dendy

Но если убрать совсем, тогда сцена ограничивается лишь объектом.
Если SceneRect задать в MainWindow(QWidget *parent), то проблема остается.

comp00 ★★★★ ()
Ответ на: комментарий от comp00

Попробуйте в fitInView() вместо scene()->sceneRect() подставлять scene()->itemsBoundingRect().

Dendy ★★★★★ ()
Ответ на: комментарий от Dendy

Мои QGraphicsItem перемещаются, и у них есть проверка на выход за границы сцены

if(!(ui->area->sceneRect().contains((ui->area->mapFromScene(item->boundingRect())).boundingRect()))){
...
}
Потому ограничивать сцену itemsBoundingRect() нельзя.
Да и на ситуацию это не влияет

comp00 ★★★★ ()
Ответ на: комментарий от comp00

и у них есть проверка на выход за границы сцены

Зачем?

Amp ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.