QObject::findChildren() 用于 QML 对象查找
QObject::findChildren() for QML object finding
我有一个带有 QQuickApplicationWindow
的 QML 表单。我需要在 QtVirtualKeyboard 的 BaseKey
元素上获取 QQuickItem
指针(它的实现放置在单独的 QML 文件中,并在程序执行时加载布局加载器),但它具有像这样的动态(运行时)类型 BaseKey_QMLTYPE_XX,其中 "XX" 是一个可变的数字。
我找到了 QObject::findChildren()
函数 http://doc.qt.io/qt-4.8/qobject.html#findChild,但我找不到类型名称中的数字 "XX"。
如何从 C++ 代码中找到 BaseKey 上的 QQuickItem 指针?
BaseKey_QMLTYPE_XX
看起来像打印对象 (print(myObject)
) 时得到的结果。我认为来自 QMetaObject::className()
.
如果对象没有 objectName
集,您将无法使用 findChild()
找到它(除非您可以访问 C++ 类型并且只有一个对象那种类型)。
我有一个 hacky test helper function 可以做一些类似于您想要的事情:
QObject *TestHelper::findPopupFromTypeName(const QString &typeName) const
{
QObject *popup = nullptr;
foreach (QQuickItem *child, overlay->childItems()) {
if (QString::fromLatin1(child->metaObject()->className()) == "QQuickPopupItem") {
if (QString::fromLatin1(child->parent()->metaObject()->className()).contains(typeName)) {
popup = child->parent();
break;
}
}
}
return popup;
}
您可以对其进行调整以迭代您传入的对象的子对象。要使其正常工作,还需要进行一些更改,但总体思路是这样的。
我有一个带有 QQuickApplicationWindow
的 QML 表单。我需要在 QtVirtualKeyboard 的 BaseKey
元素上获取 QQuickItem
指针(它的实现放置在单独的 QML 文件中,并在程序执行时加载布局加载器),但它具有像这样的动态(运行时)类型 BaseKey_QMLTYPE_XX,其中 "XX" 是一个可变的数字。
我找到了 QObject::findChildren()
函数 http://doc.qt.io/qt-4.8/qobject.html#findChild,但我找不到类型名称中的数字 "XX"。
如何从 C++ 代码中找到 BaseKey 上的 QQuickItem 指针?
BaseKey_QMLTYPE_XX
看起来像打印对象 (print(myObject)
) 时得到的结果。我认为来自 QMetaObject::className()
.
如果对象没有 objectName
集,您将无法使用 findChild()
找到它(除非您可以访问 C++ 类型并且只有一个对象那种类型)。
我有一个 hacky test helper function 可以做一些类似于您想要的事情:
QObject *TestHelper::findPopupFromTypeName(const QString &typeName) const
{
QObject *popup = nullptr;
foreach (QQuickItem *child, overlay->childItems()) {
if (QString::fromLatin1(child->metaObject()->className()) == "QQuickPopupItem") {
if (QString::fromLatin1(child->parent()->metaObject()->className()).contains(typeName)) {
popup = child->parent();
break;
}
}
}
return popup;
}
您可以对其进行调整以迭代您传入的对象的子对象。要使其正常工作,还需要进行一些更改,但总体思路是这样的。