diff --git a/scripts/mkqtdecl_common/common.conf b/scripts/mkqtdecl_common/common.conf index fe4f2da1f..1a07a185b 100644 --- a/scripts/mkqtdecl_common/common.conf +++ b/scripts/mkqtdecl_common/common.conf @@ -62,15 +62,56 @@ DECL end # -------------------------------------------------------------- -# Provides the definitions for QObject::findChild +# Provides the definitions for QObject::findChild and QObject::findChildren def add_native_impl_QObject_findChild() # alternative implementation for QObject::findChild using QObject for T add_native_impl("QObject", <<'CODE', <<'DECL') - QObject *find_child_impl (QObject *object, const QString &name) { return object->findChild (name); } + +#if QT_VERSION < 0x50000 + +#include + + QObject *find_child_impl (QObject *object, const QString &name) + { + return object->findChild (name); + } + QList find_children_impl (QObject *object, const QString &name) + { + return object->findChildren (name); + } + QList find_children_impl2 (QObject *object, const QRegExp &re) + { + return object->findChildren (re); + } +#else + +#include + + QObject *find_child_impl (QObject *object, const QString &name, Qt::FindChildOptions options) + { + return object->findChild (name, options); + } + QList find_children_impl (QObject *object, const QString &name, Qt::FindChildOptions options) + { + return object->findChildren (name, options); + } + QList find_children_impl2 (QObject *object, const QRegularExpression &re, Qt::FindChildOptions options) + { + return object->findChildren (re, options); + } +#endif CODE - gsi::method_ext("findChild", &find_child_impl, "@brief Specialisation for findChild (uses QObject as T).") +#if QT_VERSION < 0x50000 + gsi::method_ext("findChild", &find_child_impl, gsi::arg("name", QString(), "null"), "@brief Specialisation for findChild (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl, gsi::arg("name", QString(), "null"), "@brief Specialisation for findChildren (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl2, gsi::arg("re"), "@brief Specialisation for findChildren (uses QObject as T).") +#else + gsi::method_ext("findChild", &find_child_impl, gsi::arg("name", QString(), "null"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChild (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl, gsi::arg("name", QString(), "null"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChildren (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl2, gsi::arg("re"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChildren (uses QObject as T).") +#endif DECL end diff --git a/src/gsiqt/qt4/QtCore/gsiDeclQObject.cc b/src/gsiqt/qt4/QtCore/gsiDeclQObject.cc index 81e440d14..2ab3add1e 100644 --- a/src/gsiqt/qt4/QtCore/gsiDeclQObject.cc +++ b/src/gsiqt/qt4/QtCore/gsiDeclQObject.cc @@ -51,7 +51,40 @@ static void _call_smo (const qt_gsi::GenericStaticMethod *, gsi::SerialArgs &, g ret.write (QObject::staticMetaObject); } - QObject *find_child_impl (QObject *object, const QString &name) { return object->findChild (name); } + +#if QT_VERSION < 0x50000 + +#include + + QObject *find_child_impl (QObject *object, const QString &name) + { + return object->findChild (name); + } + QList find_children_impl (QObject *object, const QString &name) + { + return object->findChildren (name); + } + QList find_children_impl2 (QObject *object, const QRegExp &re) + { + return object->findChildren (re); + } +#else + +#include + + QObject *find_child_impl (QObject *object, const QString &name, Qt::FindChildOptions options) + { + return object->findChild (name, options); + } + QList find_children_impl (QObject *object, const QString &name, Qt::FindChildOptions options) + { + return object->findChildren (name, options); + } + QList find_children_impl2 (QObject *object, const QRegularExpression &re, Qt::FindChildOptions options) + { + return object->findChildren (re, options); + } +#endif // bool QObject::blockSignals(bool b) @@ -757,7 +790,15 @@ static gsi::Methods methods_QObject () { } qt_gsi::QtNativeClass decl_QObject ("QtCore", "QObject_Native", - gsi::method_ext("findChild", &find_child_impl, "@brief Specialisation for findChild (uses QObject as T).") +#if QT_VERSION < 0x50000 + gsi::method_ext("findChild", &find_child_impl, gsi::arg("name", QString(), "null"), "@brief Specialisation for findChild (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl, gsi::arg("name", QString(), "null"), "@brief Specialisation for findChildren (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl2, gsi::arg("re"), "@brief Specialisation for findChildren (uses QObject as T).") +#else + gsi::method_ext("findChild", &find_child_impl, gsi::arg("name", QString(), "null"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChild (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl, gsi::arg("name", QString(), "null"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChildren (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl2, gsi::arg("re"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChildren (uses QObject as T).") +#endif + methods_QObject (), "@hide\n@alias QObject"); diff --git a/src/gsiqt/qt5/QtCore/gsiDeclQObject.cc b/src/gsiqt/qt5/QtCore/gsiDeclQObject.cc index 8b2376519..70ccedc94 100644 --- a/src/gsiqt/qt5/QtCore/gsiDeclQObject.cc +++ b/src/gsiqt/qt5/QtCore/gsiDeclQObject.cc @@ -52,7 +52,40 @@ static void _call_smo (const qt_gsi::GenericStaticMethod *, gsi::SerialArgs &, g ret.write (QObject::staticMetaObject); } - QObject *find_child_impl (QObject *object, const QString &name) { return object->findChild (name); } + +#if QT_VERSION < 0x50000 + +#include + + QObject *find_child_impl (QObject *object, const QString &name) + { + return object->findChild (name); + } + QList find_children_impl (QObject *object, const QString &name) + { + return object->findChildren (name); + } + QList find_children_impl2 (QObject *object, const QRegExp &re) + { + return object->findChildren (re); + } +#else + +#include + + QObject *find_child_impl (QObject *object, const QString &name, Qt::FindChildOptions options) + { + return object->findChild (name, options); + } + QList find_children_impl (QObject *object, const QString &name, Qt::FindChildOptions options) + { + return object->findChildren (name, options); + } + QList find_children_impl2 (QObject *object, const QRegularExpression &re, Qt::FindChildOptions options) + { + return object->findChildren (re, options); + } +#endif // bool QObject::blockSignals(bool b) @@ -813,7 +846,15 @@ static gsi::Methods methods_QObject () { } qt_gsi::QtNativeClass decl_QObject ("QtCore", "QObject_Native", - gsi::method_ext("findChild", &find_child_impl, "@brief Specialisation for findChild (uses QObject as T).") +#if QT_VERSION < 0x50000 + gsi::method_ext("findChild", &find_child_impl, gsi::arg("name", QString(), "null"), "@brief Specialisation for findChild (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl, gsi::arg("name", QString(), "null"), "@brief Specialisation for findChildren (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl2, gsi::arg("re"), "@brief Specialisation for findChildren (uses QObject as T).") +#else + gsi::method_ext("findChild", &find_child_impl, gsi::arg("name", QString(), "null"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChild (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl, gsi::arg("name", QString(), "null"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChildren (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl2, gsi::arg("re"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChildren (uses QObject as T).") +#endif + methods_QObject (), "@hide\n@alias QObject"); diff --git a/src/gsiqt/qt6/QtCore/gsiDeclQObject.cc b/src/gsiqt/qt6/QtCore/gsiDeclQObject.cc index 5220ea53d..f4a89d144 100644 --- a/src/gsiqt/qt6/QtCore/gsiDeclQObject.cc +++ b/src/gsiqt/qt6/QtCore/gsiDeclQObject.cc @@ -52,7 +52,40 @@ static void _call_smo (const qt_gsi::GenericStaticMethod *, gsi::SerialArgs &, g ret.write (QObject::staticMetaObject); } - QObject *find_child_impl (QObject *object, const QString &name) { return object->findChild (name); } + +#if QT_VERSION < 0x50000 + +#include + + QObject *find_child_impl (QObject *object, const QString &name) + { + return object->findChild (name); + } + QList find_children_impl (QObject *object, const QString &name) + { + return object->findChildren (name); + } + QList find_children_impl2 (QObject *object, const QRegExp &re) + { + return object->findChildren (re); + } +#else + +#include + + QObject *find_child_impl (QObject *object, const QString &name, Qt::FindChildOptions options) + { + return object->findChild (name, options); + } + QList find_children_impl (QObject *object, const QString &name, Qt::FindChildOptions options) + { + return object->findChildren (name, options); + } + QList find_children_impl2 (QObject *object, const QRegularExpression &re, Qt::FindChildOptions options) + { + return object->findChildren (re, options); + } +#endif // bool QObject::blockSignals(bool b) @@ -771,7 +804,15 @@ static gsi::Methods methods_QObject () { } qt_gsi::QtNativeClass decl_QObject ("QtCore", "QObject_Native", - gsi::method_ext("findChild", &find_child_impl, "@brief Specialisation for findChild (uses QObject as T).") +#if QT_VERSION < 0x50000 + gsi::method_ext("findChild", &find_child_impl, gsi::arg("name", QString(), "null"), "@brief Specialisation for findChild (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl, gsi::arg("name", QString(), "null"), "@brief Specialisation for findChildren (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl2, gsi::arg("re"), "@brief Specialisation for findChildren (uses QObject as T).") +#else + gsi::method_ext("findChild", &find_child_impl, gsi::arg("name", QString(), "null"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChild (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl, gsi::arg("name", QString(), "null"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChildren (uses QObject as T).") + + gsi::method_ext("findChildren", &find_children_impl2, gsi::arg("re"), gsi::arg("options", Qt::FindChildrenRecursively, "Qt::FindChildrenRecursively"), "@brief Specialisation for findChildren (uses QObject as T).") +#endif + methods_QObject (), "@hide\n@alias QObject"); diff --git a/testdata/ruby/qtbinding.rb b/testdata/ruby/qtbinding.rb index 356aaa29e..f0164c397 100644 --- a/testdata/ruby/qtbinding.rb +++ b/testdata/ruby/qtbinding.rb @@ -767,6 +767,35 @@ class QtBinding_TestClass < TestBase end + def test_60 + + # findChild, findChildren + + w = RBA::QWidget::new + w.objectName = "w" + w1 = RBA::QWidget::new(w) + w1.objectName = "w1" + w2 = RBA::QWidget::new(w1) + w2.objectName = "w2" + + assert_equal(w.findChild.objectName, "w1") + assert_equal(w.findChild("w2").objectName, "w2") + + assert_equal(w.findChildren().collect { |c| c.objectName }.join(","), "w1,w2") + assert_equal(w.findChildren("w2").collect { |c| c.objectName }.join(","), "w2") + + begin + # Qt5++ + re_cls = RBA::QRegularExpression + rescue => ex + # Qt4 + re_cls = RBA::QRegExp + end + assert_equal(w.findChildren(re_cls::new("^.2$")).collect { |c| c.objectName }.join(","), "w2") + assert_equal(w.findChildren(re_cls::new("^w.$")).collect { |c| c.objectName }.join(","), "w1,w2") + + end + end load("test_epilogue.rb")