Lua: Export sizePolicy parameter for Widgets

Extend lua bindings to support horizontal and vertical size policies.

Change-Id: I663b17bd11086efd2cbf430aace800fde55b6c0d
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Krzysztof Chrusciel
2024-12-03 12:11:10 +01:00
committed by Marcus Tillmanns
parent 08870178bb
commit 91fcdcce2d
4 changed files with 41 additions and 0 deletions

View File

@@ -20,6 +20,7 @@
#include <QPushButton>
#include <QScrollArea>
#include <QSize>
#include <QSizePolicy>
#include <QSpacerItem>
#include <QSpinBox>
#include <QSplitter>
@@ -791,6 +792,11 @@ void Widget::setCursor(Qt::CursorShape shape)
access(this)->setCursor(shape);
}
void Widget::setSizePolicy(const QSizePolicy &policy)
{
access(this)->setSizePolicy(policy);
}
void Widget::activateWindow()
{
access(this)->activateWindow();

View File

@@ -31,6 +31,7 @@ class QObject;
class QPushButton;
class QScrollArea;
class QSize;
class QSizePolicy;
class QSpinBox;
class QSplitter;
class QStackedWidget;
@@ -250,6 +251,7 @@ public:
void setAutoFillBackground(bool);
void setLayout(const Layout &layout);
void setSize(int, int);
void setSizePolicy(const QSizePolicy &policy);
void setFixedSize(const QSize &);
void setWindowTitle(const QString &);
void setWindowFlags(Qt::WindowFlags);
@@ -537,6 +539,7 @@ QTC_DEFINE_BUILDER_SETTER(widgetAttribute, setWidgetAttribute);
QTC_DEFINE_BUILDER_SETTER(autoFillBackground, setAutoFillBackground);
QTC_DEFINE_BUILDER_SETTER(readOnly, setReadOnly);
QTC_DEFINE_BUILDER_SETTER(markdown, setMarkdown);
QTC_DEFINE_BUILDER_SETTER(sizePolicy, setSizePolicy);
QTC_DEFINE_BUILDER_SETTER(basePath, setBasePath);
QTC_DEFINE_BUILDER_SETTER(fixedSize, setFixedSize);

View File

@@ -88,6 +88,7 @@ CREATE_HAS_FUNC(onTextChanged, nullptr, nullptr)
CREATE_HAS_FUNC(onClicked, nullptr, nullptr)
CREATE_HAS_FUNC(setText, QString())
CREATE_HAS_FUNC(setMarkdown, QString())
CREATE_HAS_FUNC(setSizePolicy, QSizePolicy())
CREATE_HAS_FUNC(setReadOnly, bool())
CREATE_HAS_FUNC(setTitle, QString())
CREATE_HAS_FUNC(setValue, int())
@@ -290,6 +291,19 @@ void setProperties(std::unique_ptr<T> &item, const sol::table &children, QObject
if (markdown)
item->setMarkdown(*markdown);
}
if constexpr (has_setSizePolicy<T>) {
auto sizePolicy = children.get<sol::optional<sol::table>>("sizePolicy");
if (sizePolicy) {
QTC_ASSERT(
sizePolicy->size() == 2,
throw sol::error(
"sizePolicy must be array of 2 elements: horizontalPolicy, verticalPolicy.")
);
auto horizontalPolicy = sizePolicy->get<QSizePolicy::Policy>(1);
auto verticalPolicy = sizePolicy->get<QSizePolicy::Policy>(2);
item->setSizePolicy(QSizePolicy(horizontalPolicy, verticalPolicy));
}
}
if constexpr (has_setTitle<T>) {
item->setTitle(children.get_or<QString>("title", ""));
}
@@ -552,6 +566,9 @@ void setupGuiModule()
mirrorEnum(gui, QMetaEnum::fromType<Qt::TextInteractionFlag>());
mirrorEnum(gui, QMetaEnum::fromType<Qt::CursorShape>());
auto sizePolicy = gui.create_named("QSizePolicy");
mirrorEnum(sizePolicy, QMetaEnum::fromType<QSizePolicy::Policy>());
gui.new_usertype<Stack>(
"Stack",
sol::call_constructor,

View File

@@ -26,6 +26,7 @@ gui.widget = {}
---@field windowFlags? WindowType[] The window flags of the widget.
---@field widgetAttributes? WidgetAttributeMapT<boolean> The widget attributes of the widget.
---@field autoFillBackground? boolean A boolean, representing whether the widget should automatically fill its background.
---@field sizePolicy? SizePolicy.Policy[] Two size policies of the widget, horizontal and vertical.
gui.baseWidgetOptions = {}
---@class (exact) WidgetOptions : BaseWidgetOptions
@@ -460,6 +461,20 @@ gui.CursorShape = {
CustomCursor = 0
}
gui.SizePolicy = {
--- Enum representing size policy.
---@enum Policy
Policy = {
Fixed = 0,
Minimum = 0,
Maximum = 0,
Preferred = 0,
MinimumExpanding = 0,
Expanding = 0,
Ignored = 0
}
}
---@class Space : Layout
gui.space = {}