调整大小时QGraphicsView中项目位置的余量

时间:2016-09-30 09:53:26

标签: qt qgraphicsview

我正在使用图形视图框架将运行时的项目添加到视图中。物品将像垂直布局一样放在另一个下面。

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

我用Google搜索并找到了

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

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

即使视图小部件缩小或展开,我也总是希望保持相同的项目大小。滚动条必须出现。

1 个答案:

答案 0 :(得分:1)

QGraphicsView是场景中的视口。你提到在视图中添加内容,这不是你正在做的事情;您将它们添加到场景中,然后视图可视化它们。可能你已经理解了这一点,但只是要明确。

我认为您想要做的是,在调整视图大小时,您希望像素到场景的关系保持不变,并且您希望视图的原点“粘贴”到场景的原点。你提到了一个边缘,但是在场景/视图关系中没有这样的东西,所以这是你必须自己维护的东西。换句话说,只需在场景中放置任何项目即可在场景中创建边距,然后您必须翻译视图,以便场景中的边距区域始终位于视图的视口中。这是我认为你遇到麻烦的第二部分。

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