QGraphics手动调整窗口大小后场景宽度/高度没有变化

QGraphicsScene width/height is not changing after the window was resized manually

本文关键字:高度 有变化 调整 窗口大小 QGraphics      更新时间:2023-10-16

>我有一个由图形视图和图形场景组成的应用程序。基本的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);
}

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

通常根本不

需要使用设置场景矩形,除非场景包含非常多的项目。当您可以比itemsBoundingRect()更快地计算场景内容的边界矩形时,或者如果您知道场景的固定最大大小 - 例如,如果场景代表一些固定大小的画布,则设置它是一种优化。否则,您别无选择,只能不设置。

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