2013-01-11 53 views
5

問題出在這一切。包含在QGridLayout中多個單元格中的小部件未居中

我有一個5 x 3的網格。

它看起來像這樣

row 0: buttonA--buttonA--buttonA nothing buttonB--buttonB--buttonB 

row 1: empty row 

row 2: buttonC nothing buttonD nothing buttonE nothing buttonF  

在空間那裏是不是整個行或列中minimumRowHeight和所有的這些設置會工作。對?

好吧。按鈕A和按鈕B(以及其他按鈕)永遠不會集中在它們共享的3個單元格上。決不。無論我在佈局的參數上寫什麼都不重要。

我刪除了代碼,因爲它最終使用垂直佈局,並在裏面,兩個水平佈局。那些以這種方式爲中心。但我想把它們定位得更好。

什麼doesn't工作是添加窗口小部件時,使用:

addWidget(窗口小部件,0,0,2,0,QT :: AlignHCenter);甚至連AlignCenter都不起作用。

如何使它居中或對齊的權利?

謝謝!

+0

我發現了一些帖子,告訴在3個單元格空間內添加一個可擴展的虛擬小部件。然後在它上面插入一個佈局和我們想要居中的小部件。它會起作用嗎?它不是很複雜嗎? – darkgaze

+0

作爲一個方面說明,你展示了一個7×3的網格,而不是一個5×3的網格 –

+0

如果你想讓buttonA拉伸3列,你必須做「addWidget(widget,0,0,** 0, 3 **);「嘗試如果這工作 –

回答

9

QGridLayout::addWidget()語法是這樣的:

空隙QGridLayout :: addWidget(QWidget的*插件,INT fromRow,INT fromColumn,INT ROWSPAN,INT columnSpan,Qt的::對準對準= 0)

與描述:

該版本增加插件的賦予單元網格,跨越畝多行/列。單元格將從「行」開始,從列跨越行跨度行和列跨度列

這意味着你的行

addWidget(widget, 0, 0, 2, 0, Qt::AlignHCenter); 

fromRow = 0fromColumn = 0rowSpan = 2columnSpan = 0。這意味着它從第0行開始,跨越兩行,即它將在第0行和第1行(注:總共兩行,而不是兩行)。此外,它從第0列開始,跨度爲0,我認爲這意味着列跨度被忽略。

所以,你真的想應該是什麼:

addWidget(widget, 0, 0, 0, 3, Qt::AlignCenter); 

你可能有對準了一下實驗。

此外,你可以看看this example,它演示瞭如何在兩行和兩列上拉伸按鈕。

+0

棒極了!不錯的工作。非常感謝你的回答 – darkgaze

相關問題