代码之家  ›  专栏  ›  技术社区  ›  Wagmare

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

  •  1
  • Wagmare  · 技术社区  · 8 年前

    我使用图形视图框架在运行时将项目添加到视图中。项目将像垂直布局一样一个接一个地放置。

    我用谷歌搜索发现

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

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

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   goug    8 年前

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

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