forked from qt-creator/qt-creator
Utils: Set up form layout buddies automatically in LayoutBuilder
Change-Id: I79e523f7847258a43ffe263f80c52983651aa34d Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -144,6 +144,22 @@ static void setMargins(bool on, QLayout *layout)
|
||||
layout->setContentsMargins(d, d, d, d);
|
||||
}
|
||||
|
||||
static QWidget *widgetForItem(QLayoutItem *item)
|
||||
{
|
||||
if (QWidget *w = item->widget())
|
||||
return w;
|
||||
if (item->spacerItem())
|
||||
return nullptr;
|
||||
QLayout *l = item->layout();
|
||||
if (!l)
|
||||
return nullptr;
|
||||
for (int i = 0, n = l->count(); i < n; ++i) {
|
||||
if (QWidget *w = widgetForItem(l->itemAt(i)))
|
||||
return w;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static void flushPendingFormItems(QFormLayout *formLayout,
|
||||
LayoutBuilder::LayoutItems &pendingFormItems)
|
||||
{
|
||||
@@ -190,6 +206,17 @@ static void flushPendingFormItems(QFormLayout *formLayout,
|
||||
QTC_CHECK(false);
|
||||
}
|
||||
|
||||
// Set up label as buddy if possible.
|
||||
const int lastRow = formLayout->rowCount() - 1;
|
||||
QLayoutItem *l = formLayout->itemAt(lastRow, QFormLayout::LabelRole);
|
||||
QLayoutItem *f = formLayout->itemAt(lastRow, QFormLayout::FieldRole);
|
||||
if (l && f) {
|
||||
if (QLabel *label = qobject_cast<QLabel *>(l->widget())) {
|
||||
if (QWidget *widget = widgetForItem(f))
|
||||
label->setBuddy(widget);
|
||||
}
|
||||
}
|
||||
|
||||
pendingFormItems.clear();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user