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:
hjk
2022-07-14 18:16:31 +02:00
parent 2b3386908a
commit 11deab03a9

View File

@@ -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();
}