c++ - 手动调整窗口大小后 QGraphicsScene 宽度/高度没有改变

标签 c++ qt size qgraphicsview qgraphicsscene

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

相关文章:

c++ - 关于 const 引用和临时对象的问题

c++ - Qt GUI 变得 react 迟钝,发出信号的速度太快

python - PyQt5 和 QAbstractListModel::columnCount

perl - 如何检测 Perl 中不断变化的目录大小

c# - C#中链表的大小

c++ - C++ 中的 priority_queues

c++ - 如果 C++ 中的长度大于 n,则跳过读取 INI 文件中的一行

java - 我如何在 C++ 的堆栈上正确添加 QTWidgets?

c++ - 32kB的编译代码是多少

c++ - 显示二进制加法后的最后一位