C++ Qt QGraphicsView-布局不收缩&;未调用sizeHint、minimumSizeHint等

C++ Qt QGraphicsView-布局不收缩&;未调用sizeHint、minimumSizeHint等,c++,qt,qt5,C++,Qt,Qt5,我有以下非常简单的设置: 在显示为窗口(无父窗口)的QWidget中,只有一个QVBoxLayout。 在该QVBoxLayout中,有一个自定义的QGraphicsView。 该自定义QGraphicsView的大小策略设置为Preferred/Preferred,setHeightForWidth设置为true(并在自定义类中被覆盖)-我希望保留纵横比 此处是小部件的整个构造函数: graphicsView = new CustomGraphicsView(); QVBoxLayout *l

我有以下非常简单的设置:

在显示为窗口(无父窗口)的QWidget中,只有一个QVBoxLayout。
在该QVBoxLayout中,有一个自定义的QGraphicsView。
该自定义QGraphicsView的大小策略设置为Preferred/Preferred,setHeightForWidth设置为true(并在自定义类中被覆盖)-我希望保留纵横比

此处是小部件的整个构造函数:

graphicsView = new CustomGraphicsView();
QVBoxLayout *layout = new QVBoxLayout();
layout->setMargin(0);
QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred);
sp.setHeightForWidth(true);
graphicsView->setSizePolicy(sp);
layout->addWidget(graphicsView);
setLayout(layout);
此设置有效,并且在将窗口的宽度拉大(高度随之增加)时,纵横比保持不变。
但只要我将窗口宽度拖小,图形视图的纵横比就会保持不变,但窗口本身的高度不会收缩。结果是一个小的图形视图,上面和下面都有很多不应该存在的空间

进一步调查后,我试图找出问题的症结所在,因此我重载了自定义图形视图的所有sizeHint()、minimumSize()、minimumHeight()等函数。
只是为了发现,在我手动调整窗口大小时,它们中没有一个被调用。唯一按预期调用的是heightForWidth,它返回我的计算值,但当窗口缩小时,不会应用它的返回值

因此,我不仅不知道为什么尽管有首选的垂直策略(明确地说“小部件可以扩展,,但它比sizeHint()大没有任何优势),
我也不知道布局是如何从小部件中获得大小的。我假设sizeHint(),因为所有文档都永久引用它,但在本例中这显然是错误的

我已经尝试将垂直策略设置为每个可能的值。它们中没有一个会导致窗户像预期的那样变大变小

我当前的解决方法:
我已将resizeEvent(…)函数添加到小部件中,在该小部件中,如果其高度超过自定义图形小部件的heightForWidth()函数返回的值,我将手动调整整个小部件的大小。
就解决方法而言,这还行,但它会导致严重的闪烁(在resizeEvent内调整大小时通常如此)

对这两个问题有什么想法吗