gpt4 book ai didi

c++ - 如何在调整大小时保持相同的场景部分可见?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:38 27 4
gpt4 key购买 nike

我正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com