2008-10-24 81 views
12

我有一个复杂的对话框,它充满了空白,我无法缩小它。在Designer中,它拥有很多动态隐藏的组件,还有一些动态添加的组件。我添加了大小策略,大小提示和最小大小的倾销,但仍然无法弄清楚为什么Qt不会让我拖拽它更小。如何调试Qt布局问题

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

请分享。

回答

4

我不知道这样做的任何工具,但我之前通过更改对话框中不同元素的调色板来管理它,然后查看占用更多(或更少)空间的内容比我预期的要多,并将调查重点放在这些要素上。

从更一般的意义上说,确保您已将对话框设置为不是固定大小。这让我有点失望。

1

听起来像我们可以使用相当于Firebug元素和CSS度量检查器模式。这种工具中最难的部分将是有效地找出并传达单个布局策略为什么使用或不使用小部件中的给定大小值。

1

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

如果您使用QGridLayout,你可以尝试做的事情span columns/rows

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

3

你可以捕捉的QApplication :: focusChanged(QWidget的*,* QWidget的)信号和改变当前焦点窗口小部件的背景。我认为这将有助于确定每个小部件占用多少空间。

0

大量的试验和错误。我发现在战略位置插入延伸通常会帮助我产生我想要的效果。举例来说,如果我有一个布局的QPushButton,我想成为的最小尺寸,我会做一些这样的:

 

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

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

另外,不要忘记,你可以设置一个布局的内容保证金与setContentsMargins()。

,因为我发现我理解的布局系统更好,当我在代码与它玩,我不使用设计器。