QGraphicsView fitInView 边距

Posted

技术标签:

【中文标题】QGraphicsView fitInView 边距【英文标题】:QGraphicsView fitInView margins 【发布时间】:2013-10-28 16:54:40 【问题描述】:

为什么会这样:

graphics_view->fitInView(scene->sceneRect(), Qt::KeepAspectRatio);

没有按预期工作?它没有正确拟合场景矩形,显示它周围的边距。

【问题讨论】:

添加一个最小的代码示例和一个屏幕截图,以及它与您的预期有何不同。 【参考方案1】:

原因是这样的: https://bugreports.qt.io/browse/QTBUG-42331 - 请在 qt 错误跟踪器上投票以提高其优先级。

简而言之,fitInView 具有硬编码的边距,这可能会导致各种破坏 - 最不重要的是现在您会丢失几个像素的显示区域,并且还可能会强制进行不必要的重新缩放。

您可以通过在现有实现的基础上重新实现 fitInView 来解决此问题,但移除它的可笑边距。基于原始 C++ 版本的 python 中提供了一个示例:

https://github.com/nevion/pyqimageview/blob/master/qimageview/widget.py#L276

【讨论】:

【参考方案2】:

我发现了问题所在,它在this question 中有描述。问题的主要原因是您不应该在显示表单之前调用 fitInView。

【讨论】:

实际上,这完全取决于您所说的边距是什么意思,我想既然您还问了这个问题,那么在您链接的问题中可能是这些巨大的问题。无论如何,您可以在显示表单之前调用 fitInView 。【参考方案3】:

您可以通过重新实现原始 fitInView 方法来修复它,但不包括边距。检查我的 C++ 解决方案:https://***.com/a/42474510/6050364

【讨论】:

以上是关于QGraphicsView fitInView 边距的主要内容,如果未能解决你的问题,请参考以下文章

QGraphicsView fitInView 边距

尽管使用了 itemsBoundingRect(),但 QGraphicsScene 和 fitInView() 无法正确缩放

如何制作小部件的屏幕截图并将其粘贴到 QGraphicsView 中?

qgraphicsview图片下方添加文字

如何在 QGraphicsView::Scale 之后调整 QGraphicsView 的大小

QGraphicsView::NoViewportUpdate 不起作用