gpt4 book ai didi

c++ - 手动调整窗口大小后 QGraphicsScene 宽度/高度没有改变

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:35 25 4
gpt4 key购买 nike

我有一个由图形 View 和图形场景组成的应用程序。基本的 GUI 结构是这样的(在 Qt Creator 中完成):

QMainWindow
QWidget (centralWidget)
QGridLayout
QVBoxLayout
QGraphicsView

这是我的主窗口构造函数代码:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
{
ui->setupUi(this);

scene = new Scene(this);
ui->graphicsView->setScene(scene);
scene->setSceneRect(-100,-100,200,200);
}

现在,当我手动调整应用程序窗口大小时,场景/图形 View 在视觉上也会调整大小。它在所有可见区域也处于事件状态,我可以捕获鼠标事件,在那里添加项目,尽管它不在 setSceneRect() 设置的区域。但是当我调用 scene->width()scene->height() 时,它总是返回 200。如何获取场景可见部分的大小而不是 setSceneRect() 中设置的大小?场景的可见部分是指我的项目可视化的白色可见区域/矩形,如果项目超出此区域,则不可见。

最佳答案

一般情况下根本不需要设置场景矩形,除非场景中的项目非常多。当您可以比 itemsBoundingRect() 更快地计算场景内容的边界矩形时,或者如果您知道场景的固定最大尺寸 - 例如如果场景代表一些固定大小的 Canvas 。否则,您别无选择,只能保留它。

无论如何,将场景矩形绑定(bind)到视口(viewport)是不正确的。场景矩形由空间索引使用,并且必须代表场景的内容,与任何视口(viewport)无关。回想一下,场景是一个可单独使用的模型——它可以附加 0 个或多个视口(viewport)。将任何特定视口(viewport)与任何场景参数强绑定(bind)是设计错误。

关于c++ - 手动调整窗口大小后 QGraphicsScene 宽度/高度没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49303556/

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