2015-09-12 3 views
1

Я хочу изменить свою позицию QGraphicsItem путем изменения размера события по графическому просмотру.изменить положение qgraphicsitem по сцене изменить размер

Я изменил положение на newSize/oldSize, но мои позиции остаются в одном положении. Я не знаю, что случилось с моим кодом или лучшим способом изменить положение моих позиций.

bool cameraItems::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (event->type() == QEvent::Resize) { 
     QResizeEvent *e = static_cast<QResizeEvent*>(event); 
     if(obj == ui->graphicsView) { 
       setFixedSizeForGraphicsView(e->size(), e->oldSize()); 
       ui->graphicsView->scene()->setSceneRect(0, 0, e->size().width(), e->size().height()); 
       ui->graphicsView->setSceneRect(0, 0, e->size().width(), e-->size().height()); 
     } 
    } 
    QWidget::eventFilter(obj, event); 
} 



void cameraItems::setFixedSizeForGraphicsView(QSize size, QSize oldSize) 
{ 
    foreach (singleCamera *cam, m_cameras) { 
      prevImageSize = cam->imageSize(); 
     QPointF ppos = cam->pos(); 
     QPointF newPos = QPointF((ppos.x()/prevSize.width())*size.width(), (ppos.y()/prevSize.height())*size.height()); 
     cam->setPos(newPos); 
    } 
} 

ответ

1

Вы можете сделать свой собственный класс, который наследуется от QGraphicsView, а затем переописать resizeEvent(QResizeEvent *event) как:

void MyView::resizeEvent(QResizeEvent *event) 
{ 
    QRectF rect = this->scene()->itemsBoundingRect(); 
    fitInView(rect, ,Qt::KeepAspectRatio); 

    QGraphicsView::resizeEvent(event); 
} 

Таким образом, точка зрения всегда будет отображать всю сцену. То есть если размер окна изменен, а графическое изображение будет изменено, сцена будет масштабирована, и вы сможете увидеть все правильно.

Смежные вопросы