Qt QGraphicsView怎样挂接到调整大小事件

3
我们正在进行一个Qt C++ Widget项目,最近遇到了问题。我们是Qt新手。
在我们的小部件中有两个QGraphicsView,需要在窗口调整大小时自动调整大小(我们已经做到了),并使其中的内容相应地调整/适合/缩放...
因此,我们想出了需要以某种方式钩住onResizeEvent或找到哪个槽来执行它。但是我们对如何做到这一点感到困惑。
P.S.:请原谅我的英语。

我认为你需要使用QBoxLayout。并将此布局设置在centralWidget上。你是使用Qt Designer还是一切都是通过代码完成的? - Marek R
3个回答

3

1
您可以创建一个继承自QGraphicsView的自定义类。您需要在自定义QGraphicsView中重新实现resizeEvent(QResizeEvent *event)方法,例如:
void MyView::resizeEvent(QResizeEvent *event)
{

    fitInView(0, 0, 500, 500,Qt::KeepAspectRatio);

    QGraphicsView::resizeEvent(event);
}

这样视图就会始终显示整个场景。即,如果窗口大小发生变化且graphicsView被调整大小,则场景会被缩放,您可以适当地看到所有内容。

3
注意:在resizeEvent()中使用fitInView()可能会非常危险,导致无限的调整大小循环!因此,如果必须这样做,请确保防止出现循环。 - Smar
@Smar,你有什么“保障”建议吗?我遇到了滚动条上的resizeEvents流被显示/不显示的问题。我的解决方案是:在paintEvent中明确管理Scrollbar的可见性,并在决定可见性的例程中使用激活滞后。是否有更简单的解决方案? - Jürgen Böhm
@JürgenBöhm 我已经很久没有碰过这段代码了,但通常情况下,我们可以在对象中设置一个标志,在resizeEvent()内部使用它来检测我们是否已经到达过这里。但确切的解决方案当然取决于上下文。 - Smar
@Smar感谢您抽出时间写答案。我最初也尝试了这样的解决方案(在resizeEvent中使用recursion_count整数),但它没有帮助,因为在关键情况下,垂直(或水平)大小不断交替变大和变小。 - Jürgen Böhm

0

如果你正在某个插槽中调整大小,那么你可以使用 sender()。 顺便说一句,你总是可以使用调试器或日志/回溯来获取这样的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接