手动调整窗口大小后,QGraphicsScene宽度/高度不会改变

时间:2018-03-15 15:35:48

标签: c++ qt size qgraphicsview qgraphicsscene

我有一个由图形视图和图形场景组成的应用程序。基本的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()中设置的大小?在场景的可见部分,我的意思是白色可见区域/矩形,我的项目可视化,如果项目离开这个区域,它是不可见的。

1 个答案:

答案 0 :(得分:0)

除非场景中有很多项目,否则通常根本不需要使用设置场景矩形。如果您可以比itemsBoundingRect()更快地计算场景内容的边界矩形,或者如果您知道场景的固定最大尺寸,则设置它是一种优化。如果场景代表一些固定大小的画布。否则,你没有办法,只能让它失去作用。

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