我有一个由图形 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/