我試圖創建一個標準的兩列表單,其中第一列是文本標籤(QLabel
),第二列是交互式小部件,通常是文本字段(QLineEdit
)。我們決定在QGroupBox
之內放置共享共同主題的表單行,因此與主佈局分開佈局。因此,每個QGroupBox
中的表單元素不會與QGroupBox
es之外的表單元素水平對齊。在Qt中,如何對齊不同分組框中的表單元素?
如何使組合框和佈局的方式使組合框內外的QLabel
和QLineEdit
彼此(水平)對齊?
謝謝!
我試圖創建一個標準的兩列表單,其中第一列是文本標籤(QLabel
),第二列是交互式小部件,通常是文本字段(QLineEdit
)。我們決定在QGroupBox
之內放置共享共同主題的表單行,因此與主佈局分開佈局。因此,每個QGroupBox
中的表單元素不會與QGroupBox
es之外的表單元素水平對齊。在Qt中,如何對齊不同分組框中的表單元素?
如何使組合框和佈局的方式使組合框內外的QLabel
和QLineEdit
彼此(水平)對齊?
謝謝!
可以在所有的groupboxes內標籤的最小寬度屬性設置的東西,只是寬度不足以顯示最寬的標籤。這將使不同組框中的所有標籤對齊。
現在,要獲得與其內部對齊的groupboxes之外的標籤:首先,我假設每個label/lineedit對都在其自己的水平佈局中,或者您在網格內有多行。無論哪種情況,您可以將標籤的minimumWidth設置爲與groupbox中的標籤相同的值。最後,調整水平(或網格)佈局上的layoutLeftMargin,layoutRightMargin和layoutSpacing屬性,直到標籤/ lineedit對的右邊和左邊與組框內的邊對齊。
如果您還沒有在Qt Creator或Qt Designer中使用表格編輯器來構建您的用戶界面,我發現它可以讓這項任務變得非常簡單。
我不得不承認,這感覺有點kludgey,但在我構建的簡單測試用例中,它似乎工作正常。另一方面,如果用戶更改字體大小,這看起來可能會中斷。也許有更好的方法?
希望這會有所幫助。
我不認爲它可以處理嵌套的水平和垂直佈局。你有沒有考慮過QGridLayout?
我需要內部的不同組框表單元素,所以很遺憾,我需要不同的/嵌套佈局。實際上,我已經在使用'QGridLayout'! – swongu
kenrogers提供的解決方案,並在這裏是我用得到它的工作的一些不完整的代碼:
int width = 0 ;
QDialog* dialog ;
QList<QGridLayout*> layouts = dialog->findChildren<QGridLayout*>() ;
QList<QLabel*> labels ;
foreach (QGridLayout* layout, layouts)
{
// Loop through each layout and get the label on column 0.
QLabel* foundLabel ;
labels << foundLabel ;
// Get the width.
width = qMax(foundLabel->width(), width) ;
}
foreach (QLabel* label, labels)
{
label->setMinimumWidth(width) ;
}
我會給這個鏡頭 - 我會讓你知道它是怎麼回事。 – swongu
我沒有嘗試第二個組件,但我可以告訴你,在頂層組框中設置標籤的最小寬度是神奇的。看到我自己的答案僞代碼。 – swongu