forked from qt-creator/qt-creator
Utils: Emerge widgets from LayoutItem
This allows us to call e.g. PushButton{}.emerge(); without having to
add another unnecessary layout.
Change-Id: Ica26f4776dee1843e1f40c238e1f3c1a54d14ea5
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -573,9 +573,26 @@ void LayoutItem::attachTo(QWidget *w) const
|
|||||||
|
|
||||||
QWidget *LayoutItem::emerge()
|
QWidget *LayoutItem::emerge()
|
||||||
{
|
{
|
||||||
auto w = new QWidget;
|
LayoutBuilder builder;
|
||||||
attachTo(w);
|
|
||||||
return w;
|
builder.stack.append(Slice());
|
||||||
|
addItemHelper(builder, *this);
|
||||||
|
|
||||||
|
if (builder.stack.empty())
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
QTC_ASSERT(builder.stack.last().pendingItems.size() == 1, return nullptr);
|
||||||
|
ResultItem ri = builder.stack.last().pendingItems.takeFirst();
|
||||||
|
|
||||||
|
QTC_ASSERT(ri.layout || ri.widget, return nullptr);
|
||||||
|
|
||||||
|
if (ri.layout) {
|
||||||
|
auto w = new QWidget;
|
||||||
|
w->setLayout(ri.layout);
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ri.widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void layoutExit(LayoutBuilder &builder)
|
static void layoutExit(LayoutBuilder &builder)
|
||||||
@@ -861,6 +878,17 @@ LayoutItem title(const QString &title)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LayoutItem windowTitle(const QString &windowTitle)
|
||||||
|
{
|
||||||
|
return [windowTitle](QObject *target) {
|
||||||
|
if (auto widget = qobject_cast<QWidget *>(target)) {
|
||||||
|
widget->setWindowTitle(windowTitle);
|
||||||
|
} else {
|
||||||
|
QTC_CHECK(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
LayoutItem text(const QString &text)
|
LayoutItem text(const QString &text)
|
||||||
{
|
{
|
||||||
return [text](QObject *target) {
|
return [text](QObject *target) {
|
||||||
|
|||||||
@@ -38,5 +38,16 @@ int main(int argc, char *argv[])
|
|||||||
},
|
},
|
||||||
}.emerge()->show();
|
}.emerge()->show();
|
||||||
|
|
||||||
|
Group {
|
||||||
|
windowTitle("Group without parent layout"),
|
||||||
|
title("This group was emerged without parent layout"),
|
||||||
|
Column {
|
||||||
|
Splitter {
|
||||||
|
new QTextEdit("First Widget"),
|
||||||
|
new QTextEdit("Second Widget"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}.emerge()->show();
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user