Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么第一个添加的项目总是出现在Qt中图形场景/视图的中心?_C++_Qt_Qgraphicsview_Qgraphicsscene - Fatal编程技术网

C++ 为什么第一个添加的项目总是出现在Qt中图形场景/视图的中心?

C++ 为什么第一个添加的项目总是出现在Qt中图形场景/视图的中心?,c++,qt,qgraphicsview,qgraphicsscene,C++,Qt,Qgraphicsview,Qgraphicsscene,我有一个图形场景和视图,然后我添加一个元素。但无论我给出什么x/y坐标,它总是出现在图形视图的中心 为什么会发生这种情况,我如何使它出现在,比如说,左上角 这是我的代码: scene = new QGraphicsScene(this); ui->graphicsView->setScene(scene); QGraphicsEllipseItem *ellipseItem = scene->addEllipse(150, 150, 10, 10); 您可能需要定义QGrap

我有一个图形场景和视图,然后我添加一个元素。但无论我给出什么x/y坐标,它总是出现在图形视图的中心

为什么会发生这种情况,我如何使它出现在,比如说,左上角

这是我的代码:

scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
QGraphicsEllipseItem *ellipseItem = scene->addEllipse(150, 150, 10, 10);

您可能需要定义QGraphicsView显示的场景矩形。我认为默认视图只显示当前场景的中心边界矩形,它就是椭圆。您可以使用QGraphicsView::fitInView来定义要显式显示的区域。

原因是默认情况下,
QGraphicscene
通过将所有项目矩形相加来计算its。添加第一个项目时,它会自动将其用作场景矩形。默认情况下,
QGraphicsView
在场景矩形上缩放并居中

如果知道最终或所需的场景矩形,请在添加任何项目之前进行设置:

scene->setSceneRect(0, 0, 800, 600);
scene->addEllipse(150, 150, 10, 10);

谢谢,我试过了,但是fitInView似乎也可以缩放场景,我可以避免缩放吗?在设置view rect时使用小部件的宽度和高度。此外,应该有一个受保护的“调整大小”方法,您可以覆盖该方法,以便在小部件的布局发生变化时维护视图。