我有一个由图形视图和图形场景组成的应用程序。基本的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()
中设置的大小?在场景的可见部分,我的意思是白色可见区域/矩形,我的项目可视化,如果项目离开这个区域,它是不可见的。
答案 0 :(得分:0)
除非场景中有很多项目,否则通常根本不需要使用设置场景矩形。如果您可以比itemsBoundingRect()
更快地计算场景内容的边界矩形,或者如果您知道场景的固定最大尺寸,则设置它是一种优化。如果场景代表一些固定大小的画布。否则,你没有办法,只能让它失去作用。
无论如何,将场景矩形绑定到视口是不正确的。场景矩形由空间索引使用,并且必须表示场景的内容,而与任何视口无关。回想一下,场景是一个可以自己使用的模型 - 它可以有0个或多个视口附加到它上面。将任何特定视口强烈绑定到任何场景的参数都是设计错误。