调整大小时 QGraphicsView 中项目位置的边距

margin of item position in QGraphicsView while resizing

我正在使用图形视图框架在 运行 时间内将项目添加到视图中。项目将像垂直布局一样被放置在另一个之下。

我总是把我的物品放在场景的开始位置 (10,10) 。但在调整视图大小时,边距也在调整。如何在每次调整视图 window 大小时保持相同的边距?

我用谷歌搜索并找到

QTransform Matrix(1, 0, 0, 0, 1, 0, 0, 0, 1);
Matrix.scale(width() / sceneRect().width(), height() / sceneRect().height())
setTransform(Matrix);

有助于恢复边距,但它也会根据视图高度比例缩小项目。

我一直想保持相同的项目大小,即使视图小部件缩小或展开也是如此。必须出现滚动条。

QGraphicsView 是场景的视口。你提到在视图中添加东西,这不是你在做什么;您将它们添加到场景中,然后视图将它们可视化。可能你已经明白了,但只是为了清楚。

我认为您想要做的是,当您调整视图大小时,您希望像素到场景的关系保持不变,并且您希望视图的原点 "stick" 到场景的起源。您提到了边距,但是 scene/view 关系中并没有内置这样的东西,所以这是您必须自己维护的东西。换句话说,您只需不在其中放置任何项目即可在场景中创建边距,然后您必须平移视图,以便场景中的边距区域始终位于视图的视口内。我认为您遇到问题的是第二部分。

我建议您在调整视图大小时检查视图的变换矩阵。 m11 和 m22 值是显示视图像素如何映射到场景坐标的比例因子,dx 和 dy 是显示视图原点和场景原点之间关系的平移因子。