From f7b283ea4b23f0274e4f4391b554d3e4edf75696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=81=8D=E5=85=AE=E6=83=9A=E5=85=AE?= <101191390+HIllya51@users.noreply.github.com> Date: Fri, 21 Nov 2025 19:05:48 +0800 Subject: [PATCH 1/5] update --- ElaWidgetTools | 2 +- scripts/wheel/setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ElaWidgetTools b/ElaWidgetTools index c1eed7c..e1778e9 160000 --- a/ElaWidgetTools +++ b/ElaWidgetTools @@ -1 +1 @@ -Subproject commit c1eed7c23545e61cc63a34f2cc26737c9d563f78 +Subproject commit e1778e915449930aeb88895895cf01488f83f995 diff --git a/scripts/wheel/setup.py b/scripts/wheel/setup.py index b6225cd..28243db 100644 --- a/scripts/wheel/setup.py +++ b/scripts/wheel/setup.py @@ -33,7 +33,7 @@ def has_ext_modules(self): setup( name=f"{bindingfor}-ElaWidgetTools", - version="0.5.1", + version="0.6", author="HIllya51", license="MIT", install_requires=[f"""{bindingfor}"""], From 8813d90497d9266494124605998afe23620e2cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=81=8D=E5=85=AE=E6=83=9A=E5=85=AE?= <101191390+HIllya51@users.noreply.github.com> Date: Fri, 21 Nov 2025 19:38:53 +0800 Subject: [PATCH 2/5] . --- scripts/pyqt/gen_widgets.py | 75 +++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/scripts/pyqt/gen_widgets.py b/scripts/pyqt/gen_widgets.py index ce1d9f1..a3020a5 100644 --- a/scripts/pyqt/gen_widgets.py +++ b/scripts/pyqt/gen_widgets.py @@ -490,6 +490,34 @@ def generate_sip_for_class__1(header_content, filename=""): return "\n".join(sip_lines) +def parseshitelasuggestbox(content): + + x = re.search(r"struct ELA_EXPORT SuggestData \{[\s\S]*?\};", content) + + klass = content.find("class") + content = content.replace(x.group(), "") + content = content[:klass] + x.group() + "\n" + content[klass:] + return content + + +def parseshitelasuggestbox2(): + return r"""struct SuggestData { + +%TypeHeaderCode +#include "ElaDef.h" +#include "ElaSuggestBox.h" +%End + Q_PRIVATE_CREATE(ElaIconType::IconName, ElaIcon) + Q_PRIVATE_CREATE(QString, SuggestText) + Q_PRIVATE_CREATE(QString, SuggestKey) + Q_PRIVATE_CREATE(QVariantMap, SuggestData) + public: + explicit SuggestData(); + explicit SuggestData(ElaIconType::IconName icon, const QString& suggestText, const QVariantMap& suggestData = {}); + ~SuggestData(); + };""" + + def cast_h_to_sip(filename): filename = os.path.splitext(os.path.basename(filename))[0] input_header_file = f"{eladir}/{filename}.h" @@ -497,6 +525,8 @@ def cast_h_to_sip(filename): with open(input_header_file, "r", encoding="utf-8") as f: content = f.read() + if filename == "ElaSuggestBox": + content = parseshitelasuggestbox(content) # A common pattern is to have a main .sip file that includes others. # This script generates the content for a single class. @@ -507,26 +537,31 @@ def cast_h_to_sip(filename): ) sip_class_def = generate_sip_for_class(content, input_header_file) - if sip_class_def: - full_sip_content = [] - # Add necessary imports based on base class and parameter types - # This is a basic set, might need to be smarter - full_sip_content.append("%Import QtCore/QtCoremod.sip") - full_sip_content.append("%Import QtGui/QtGuimod.sip") - full_sip_content.append("%Import QtWidgets/QtWidgetsmod.sip") - full_sip_content.append("") - full_sip_content.append(sip_class_def) - final_output = "\n".join(full_sip_content) - ls = final_output.splitlines() - ls = [_ for _ in ls if "QVector" not in _] # 不支持的类型转换 - ls = [_ for _ in ls if "QList" not in _] # 不支持的类型转换 - bad = ("long *", "qintptr *")[forQt5] - ls = [_ for _ in ls if bad not in _] # 这个是Qt5的条件编译,Qt6的话要删掉另一条 - - final_output = "\n".join(ls) - - with open(output_sip_file, "w", encoding="utf-8") as f: - f.write(final_output) + if not sip_class_def: + return + + if filename == "ElaSuggestBox": + sip_class_def = parseshitelasuggestbox2() + "\n" + sip_class_def + + full_sip_content = [] + # Add necessary imports based on base class and parameter types + # This is a basic set, might need to be smarter + full_sip_content.append("%Import QtCore/QtCoremod.sip") + full_sip_content.append("%Import QtGui/QtGuimod.sip") + full_sip_content.append("%Import QtWidgets/QtWidgetsmod.sip") + full_sip_content.append("") + full_sip_content.append(sip_class_def) + final_output = "\n".join(full_sip_content) + ls = final_output.splitlines() + ls = [_ for _ in ls if "QVector" not in _] # 不支持的类型转换 + ls = [_ for _ in ls if "QList" not in _] # 不支持的类型转换 + bad = ("long *", "qintptr *")[forQt5] + ls = [_ for _ in ls if bad not in _] # 这个是Qt5的条件编译,Qt6的话要删掉另一条 + + final_output = "\n".join(ls) + + with open(output_sip_file, "w", encoding="utf-8") as f: + f.write(final_output) allfiles = [] From 0e13c61786eeb5a199b28b9e380c95cf9cace25c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=81=8D=E5=85=AE=E6=83=9A=E5=85=AE?= <101191390+HIllya51@users.noreply.github.com> Date: Fri, 21 Nov 2025 19:44:14 +0800 Subject: [PATCH 3/5] Update gen_widgets.py --- scripts/pyqt/gen_widgets.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/scripts/pyqt/gen_widgets.py b/scripts/pyqt/gen_widgets.py index a3020a5..2a0f02b 100644 --- a/scripts/pyqt/gen_widgets.py +++ b/scripts/pyqt/gen_widgets.py @@ -502,15 +502,10 @@ def parseshitelasuggestbox(content): def parseshitelasuggestbox2(): return r"""struct SuggestData { - %TypeHeaderCode #include "ElaDef.h" #include "ElaSuggestBox.h" %End - Q_PRIVATE_CREATE(ElaIconType::IconName, ElaIcon) - Q_PRIVATE_CREATE(QString, SuggestText) - Q_PRIVATE_CREATE(QString, SuggestKey) - Q_PRIVATE_CREATE(QVariantMap, SuggestData) public: explicit SuggestData(); explicit SuggestData(ElaIconType::IconName icon, const QString& suggestText, const QVariantMap& suggestData = {}); From 2a4199af5f37c1280f1f8b438543094173f62865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=81=8D=E5=85=AE=E6=83=9A=E5=85=AE?= <101191390+HIllya51@users.noreply.github.com> Date: Fri, 21 Nov 2025 19:54:03 +0800 Subject: [PATCH 4/5] Update gen_widgets.py --- scripts/pyqt/gen_widgets.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/pyqt/gen_widgets.py b/scripts/pyqt/gen_widgets.py index 2a0f02b..678cd16 100644 --- a/scripts/pyqt/gen_widgets.py +++ b/scripts/pyqt/gen_widgets.py @@ -500,18 +500,18 @@ def parseshitelasuggestbox(content): return content -def parseshitelasuggestbox2(): - return r"""struct SuggestData { -%TypeHeaderCode -#include "ElaDef.h" -#include "ElaSuggestBox.h" -%End +def parseshitelasuggestbox2(sip_class_def: str): + extra = r"""struct SuggestData { public: explicit SuggestData(); explicit SuggestData(ElaIconType::IconName icon, const QString& suggestText, const QVariantMap& suggestData = {}); ~SuggestData(); };""" + idx = sip_class_def.rfind("public:\n") + 8 + sip_class_def = sip_class_def[:idx] + "\n" + extra + "\n" + sip_class_def[idx:] + return sip_class_def + def cast_h_to_sip(filename): filename = os.path.splitext(os.path.basename(filename))[0] @@ -536,7 +536,7 @@ def cast_h_to_sip(filename): return if filename == "ElaSuggestBox": - sip_class_def = parseshitelasuggestbox2() + "\n" + sip_class_def + sip_class_def = parseshitelasuggestbox2(sip_class_def) full_sip_content = [] # Add necessary imports based on base class and parameter types From 346fe3f7f0df575c1ba97930d7a8859df4eee10f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=81=8D=E5=85=AE=E6=83=9A=E5=85=AE?= <101191390+HIllya51@users.noreply.github.com> Date: Fri, 21 Nov 2025 20:04:01 +0800 Subject: [PATCH 5/5] Update gen_widgets.py --- scripts/pyqt/gen_widgets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/pyqt/gen_widgets.py b/scripts/pyqt/gen_widgets.py index 678cd16..d57fba6 100644 --- a/scripts/pyqt/gen_widgets.py +++ b/scripts/pyqt/gen_widgets.py @@ -548,7 +548,7 @@ def cast_h_to_sip(filename): full_sip_content.append(sip_class_def) final_output = "\n".join(full_sip_content) ls = final_output.splitlines() - ls = [_ for _ in ls if "QVector" not in _] # 不支持的类型转换 + #ls = [_ for _ in ls if "QVector" not in _] # 不支持的类型转换 ls = [_ for _ in ls if "QList" not in _] # 不支持的类型转换 bad = ("long *", "qintptr *")[forQt5] ls = [_ for _ in ls if bad not in _] # 这个是Qt5的条件编译,Qt6的话要删掉另一条