通过场景调整大小更改 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
如何在不丢失鼠标抓取的情况下将 QGraphicsItem 移动到另一个场景?