Utils: Add a PushButton object to LayoutBuilder

Change-Id: I1ed0fd9a940fcaa5361a7d619a5d316f646332b1
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2022-08-01 18:18:02 +02:00
parent 1a2732ee9c
commit fee3a1dc78
3 changed files with 63 additions and 6 deletions

View File

@@ -31,6 +31,7 @@
#include <QFormLayout>
#include <QGridLayout>
#include <QGroupBox>
#include <QPushButton>
#include <QStyle>
#include <QWidget>
@@ -469,6 +470,8 @@ LayoutBuilder::AlignAsFormLabel::AlignAsFormLabel(const LayoutItem &item)
namespace Layouting {
// "Widgets"
Group::Group(const LayoutBuilder &innerLayout)
: Group({}, innerLayout)
{}
@@ -481,6 +484,15 @@ Group::Group(const LayoutBuilder::Setters &setters, const LayoutBuilder &innerLa
func(widget);
}
PushButton::PushButton(std::initializer_list<LayoutBuilder::Setter> setters)
{
widget = new QPushButton;
for (const LayoutBuilder::Setter &func : setters)
func(widget);
}
// "Properties"
LayoutBuilder::Setter title(const QString &title, BoolAspect *checker)
{
return [title, checker](QObject *target) {
@@ -498,6 +510,39 @@ LayoutBuilder::Setter title(const QString &title, BoolAspect *checker)
};
}
LayoutBuilder::Setter onClicked(const std::function<void ()> &func, QObject *guard)
{
return [func, guard](QObject *target) {
if (auto button = qobject_cast<QAbstractButton *>(target)) {
QObject::connect(button, &QAbstractButton::clicked, guard ? guard : target, func);
} else {
QTC_CHECK(false);
}
};
}
LayoutBuilder::Setter text(const QString &text)
{
return [text](QObject *target) {
if (auto button = qobject_cast<QAbstractButton *>(target)) {
button->setText(text);
} else {
QTC_CHECK(false);
}
};
}
LayoutBuilder::Setter tooltip(const QString &toolTip)
{
return [toolTip](QObject *target) {
if (auto widget = qobject_cast<QWidget *>(target)) {
widget->setToolTip(toolTip);
} else {
QTC_CHECK(false);
}
};
}
LayoutBuilder::Break br;
LayoutBuilder::Stretch st;
LayoutBuilder::Space empty(0);