Qt QGraphicsView - 布局不缩小& sizeHint,minimumSizeHint等未被称为

时间:2016-10-10 09:46:39

标签: c++ qt qt5

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

在显示为窗口(无父级)的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中调整大小)。

关于这两个问题的任何想法?

0 个答案:

没有答案