我正在使用 QGraphicsView
来显示函数图之类的东西。 QGraphicsView
在调整大小时保持其变换,因此场景的可见部分发生变化。
我需要在调整大小时保持 View 完全相同 - 纵横比不必保持不变,因为我允许在 X 轴和 Y 轴上进行独立缩放。
这不起作用:
void resizeEvent(QResizeEvent *event) override
{
QRectF rect = mapToScene(this->viewport()->rect()).boundingRect();
QGraphicsView::resizeEvent(event);
fitInView(rect);
}
问题在于获取正确的 View 矩形。此解决方案会在调整大小时缩小。
有没有什么简单的方法可以做到这一点?
最佳答案
我遇到了完全相同的问题。当 View 的大小发生变化时,您需要手动缩放
View ,并恢复旧的中心点。在 python 中:
def resizeEvent(self, event):
w_ratio = self.rect().width() / event.oldSize().width()
h_ratio = self.rect().height() / event.oldSize().height()
self.scale(w_ratio, h_ratio)
self.centerOn(self.old_center)
你显然需要提前设置self.old_center
,例如在 showEvent()
中。如果用户可以翻译 View ,您还需要在 mouseReleaseEvent()
中更新 self.old_center
。
def showEvent(self, event):
self.old_center = self.mapToScene(self.rect().center())
def mouseReleaseEvent(self, event):
super(MyView, self).mouseReleaseEvent(event)
self.old_center = self.mapToScene(self.rect().center())
关于c++ - 如何在调整大小时保持相同的场景部分可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303022/