我有#!/bin/bash
gnome-terminal -x sh -c 'python3 main00.py'
的QML表单。我需要在QtVirtualKeyboard的QQuickApplicationWindow
个元素上获得QQuickItem
个指针(它的实现放在单独的QML文件中,并在程序执行时加载布局的Loader),但它具有动态(运行时)类似这样的BaseKey_QMLTYPE_XX,其中" XX"是一个多变的数字。
我找到BaseKey
函数http://doc.qt.io/qt-4.8/qobject.html#findChild,但我找不到数字" XX"在typename中。
如何从C ++代码中找到BaseKey上的QQuickItem指针?
答案 0 :(得分:1)
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;
}
你可以调整它来迭代你传入的对象的子节点。除了它之外还有更多的变化才能使它工作,但总体思路就在那里。