Qt窗口大小不正确,直到用户事件

问题描述 投票:7回答:1

我正在创建一个屏幕,用户可以在其中添加某些图块以在编辑器中使用,但是在添加图块时,窗口无法正确调整大小以适应内容。除了当我拖动窗口或调整大小甚至一点点然后它立即捕捉到正确的大小。

enter image description here 只需拖动窗口,它就会捕捉到正确的大小。

enter image description here

我尝试使用resize(sizeHint());这给了我一个不正确的大小和以下错误,但在调整大小/拖动时仍然会发生正确大小的捕捉。

QWindowsWindow::setGeometry: Unable to set geometry 299x329+991+536 on QWidgetWindow/'TileSetterWindow'. Resulting geometry:  299x399+991+536 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 259x329, maximum size: 16777215x16777215).

我也尝试过使用updateGeometry()和update(),但它似乎没有做太多的事情。

将窗口设置为fixedSize时,它会立即调整大小,但用户无法再调整窗口大小。我在这里做错了什么,我在哪里开始解决它?

编辑Minimal verifiable example.ui file。 selected_layout的类型为Flowlayout flowlayout_placeholder_1仅在那里,因为我无法将flowlayout直接放入设计器中。

Edit2这是一个minimal Visual Studio example。我使用Visual Studio进行Qt开发。我尝试在Qt Creator中创建一个项目,但我没有让它工作。

编辑3添加了little video(80 KB)。

Edit4这是updated Visual Studio example。它有jpo38提出的新变化。它解决了调整错误的问题。虽然现在试图缩小窗口的尺寸会导致问题。如果您尝试减少水平空间,即使有更多行的空间,它们也不会正确填充垂直空间。

c++ qt qt-designer
1个回答
3
投票

伟大的MCVE,正是需要轻松调查问题。

看起来这个FlowLayout类不是为了让用户操作的最小尺寸更改而设计的。移动窗口时,QWidget内核会“偶然”更新布局。

我可以通过修改FlowLayout::minimumSize()行为来巧妙地工作,这里是我所做的更改:

  • QSize minSize;属性添加到FlowLayout
  • 修改了qazxsw poi以简单地返回此属性
  • FlowLayout::minimumSize()函数中添加了第三个参数QSize* pMinSize。这将用于更新此doLayout属性
  • 如果指定,修改minSize以将计算的大小保存到doLayout参数
  • 如果最小尺寸发生变化,pMinSizeFlowLayout::setGeometry属性传递给minSize并使布局无效

然后布局按预期运行。

doLayout
© www.soinside.com 2019 - 2024. All rights reserved.