2008-10-24 84 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()。

,因爲我發現我理解的佈局系統更好,當我在代碼與它玩,我不使用設計器。