你如何调试Qt布局问题

时间:2008-10-24 02:11:49

标签: qt layout

我有一个复杂的对话框,它充满了空白,我无法收缩它。在Designer中,它有许多组件,然后动态隐藏,还有一些动态添加。我已经添加了大小策略,大小提示和最小大小的转储,但仍然无法弄清楚为什么Qt不会让我拖得更小。

必须有一些工具或技术来解决此问题。

请分享。

5 个答案:

答案 0 :(得分:4)

我不知道有什么工具可以做到这一点,但我之前通过更改对话框中不同元素的调色板来管理它,然后查看占用的空间比我预期的多(或更少),并将我的研究重点放在这些元素上。

从更一般的意义上讲,确保将对话框设置为不固定大小。那也是我的一次。

答案 1 :(得分:3)

您可以捕获QApplication :: focusChanged(QWidget *,QWidget *)信号并更改当前聚焦小部件的背景。我认为这有助于确定多少空间 每个小部件占用。

答案 2 :(得分:1)

听起来我们可以使用相当于Firebug的元素和CSS指标检查器模式。这样一个工具中最难的部分就是有效地找出并传达单个布局策略在小部件中使用或不使用给定大小值的原因。

答案 3 :(得分:1)

在没有看到你的布局的情况下很难分辨,但是由于使用了QGridLayout,我看到很多像你描述的调整大小问题。列或行中最大的东西是确定该列的最小宽度。一行相同。

如果您使用的是QGridLayout,则可以尝试制作span columns/rows

我还建议您在Designer中尝试所有各种布局配置,然后通过调整大小来测试它。我们实际上并没有在我工作的地方使用Designer,但是我一直用它来测试和调试布局思路。

答案 4 :(得分:0)

大量的反复试验。我发现在战略位置插入延伸通常可以帮助我产生我想要的效果。例如,如果我在布局中有一个QPushButton,我希望它是最小尺寸,我将执行以下操作:


QHBoxLayout* layout = new QHBoxLayout;
QPushButton* myBtn = new QPushButton("Test");

layout->insertStretch(1);
layout->addWidget(myBtn, 0);
layout->insertStretch(1);

另外,不要忘记您可以使用setContentsMargins()设置布局的内容边距。

我不使用Designer,因为我发现当我在代码中使用它时,我更了解布局系统。