2013-08-05 98 views
3

我在Qt 5中遇到了layout()問題。 我想創建一個動態變量對話框。 ! [在這裏輸入的形象描述] [1] 下面是構造函數的代碼:qt layout() - > setSizeConstraint

SortDialog :: SortDialog (QWidget * parent) 
     : QDialog (parent) 
{ 
     setupUi (this); 

     SecondaryGroupBox-> hide(); 
     TertiaryGroupBox-> hide(); 
     layout() -> setSizeConstraint (QLayout :: SetFixedSize); 
     setColumnRange ('A', 'Z'); 
} 

該項目成功建立,但是當你開始接收來自操作系統的信號。

Signal: SIGSEGV 
Purpose: Segmentation fault 

如果你刪除一行

layout() -> setSizeConstraint (QLayout :: SetFixedSize); 

該項目工程。 請幫幫我。 P.s.:這是一本書C++ GUI編程使用Qt 4進行編程的示例(第31頁)

+1

你的對話框實際上是否有佈局? – thuga

+0

當您處理通常超出範圍的內存時會導致分段錯誤。你最好通過一個調試器來運行它,並找出它正在崩潰的特定行。 –

+0

爲什麼在佈局中使用括號?佈局()? – otisonoza

回答

0

您必須創建一個佈局,如QVBoxLayout。

QVBoxLayout *layout = new QVBoxLayout; 
layout->setSizeConstraint (QLayout :: SetFixedSize); 
setLayout(layout); 
4

我遇到了同樣的問題。 我剛解決了它。 也許你在兩年後不想回答這個問題,但是我真的很想在某個地方寫下這個問題,因爲這個小問題在網上沒有任何關係。

問題是,Qt設計器沒有生成代碼來設置對話框的佈局。 我剛剛打開ui_sortdialog.h,發現在SortDialog之外創建了一個小部件。與此小部件相比,將創建一個佈局。該佈局被稱爲gridLayout_4,並且該窗體的每個窗口小部件和佈局都被添加到該窗體中。當我添加到功能retranslateUiSortDialog->setLayout(gridLayout_4);一切工作。生成的代碼創建了佈局,並完成了所有需要完成的操作,但它仍然保留了SortDialog而沒有引用佈局,因此layout()返回零。

2

這是因爲您沒有創建佈局。

回到設計人員,點擊表格,然後選擇網格佈局。

如果你不這樣做,佈局將爲0,程序將崩潰。

+0

簡短又甜蜜!謝謝,這正是我的問題! – partyd