您的位置:首页 > 健康 > 美食 > 河南网站建设公司哪个好呀_app网站怎么下载_my63777免费域名查询2023年_网络优化师是什么工作

河南网站建设公司哪个好呀_app网站怎么下载_my63777免费域名查询2023年_网络优化师是什么工作

2025/1/3 0:18:03 来源:https://blog.csdn.net/lanmanck/article/details/143273514  浏览:    关键词:河南网站建设公司哪个好呀_app网站怎么下载_my63777免费域名查询2023年_网络优化师是什么工作
河南网站建设公司哪个好呀_app网站怎么下载_my63777免费域名查询2023年_网络优化师是什么工作

用过QGraphicsView的都知道,原点一般设定在view和item的中心,所以帮助文档和这个网友说的不一定跟我们对的上:

关于Qt限制QGraphicsScene内部Item的移动范围_qgraphicsitem限制移动范围-CSDN博客

首先,设定view的scenerect:

ui->graphicsView->setScene(scene);
ui->graphicsView->setSceneRect(-ui->graphicsView->width()/2,-ui->graphicsView->height()/2,ui->graphicsView->width(),ui->graphicsView->height());

然后我们的item也是中心为原点:


QRectF MyRect::boundingRect()const
{return QRectF(-100,-100,200,200);
}

所以最后我们的限定位置为view的scenerect区域:


QVariant MyRect::itemChange(GraphicsItemChange change, const QVariant &value)
{if (change == ItemPositionChange && scene()){QPointF newPos = value.toPointF();//即将要移动的位置scene()->width()auto rect = scene()->views().value(0)->sceneRect();auto vrect = rect;// 由于矩形原点在中心,所以剪掉上下左右距离来判断rect.setRect(vrect.x()+boundingRect().width()/2,vrect.y()+boundingRect().height()/2,vrect.width()-boundingRect().width(),vrect.height()-boundingRect().height());// 是否在区域内if (!rect.contains(newPos)){newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left())));newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top())));return newPos;}}return QGraphicsItem::itemChange(change, value);
}

看图片:

那么,view的sceneRect和scene的sceneRect分别什么意思呢?

中文解析下:

Qt限制QGraphicsScene QGraphicsItem内部的移动范围-3YL的博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com