通过场景调整大小更改 qgraphicsitem 位置

Posted

技术标签:

【中文标题】通过场景调整大小更改 qgraphicsitem 位置【英文标题】:change qgraphicsitem position by scene resize 【发布时间】:2015-09-12 09:35:12 【问题描述】:

我想通过图形视图上的 resize 事件来更改我的 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);

这样视图将始终显示整个场景。 IE。如果改变了窗口大小并且调整了 graphicsView 的大小,场景就会被缩放,你可以适当地看到一切。

【讨论】:

以上是关于通过场景调整大小更改 qgraphicsitem 位置的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4:将QGraphicsItem调整为固定的QRectF

Qt:如何调整 QGraphicsItem 以动态改变大小

用鼠标调整 QGraphicsItem 的大小

如何在不丢失鼠标抓取的情况下将 QGraphicsItem 移动到另一个场景?

QT 4.5 - 更改 QGraphicsItem 的选择框

TextField 子视图未通过 UITableViewCell 框架大小更改调整大小