我有一个用 C++ 编写的自定义 QML 类型,类名是 MyCustomType,它位于文件 mycustomtype.h 和 mycustomtype.cpp。
在 main.cpp 文件中,QML 类型可用:
qmlRegisterType<MyCustomType>("MyCustomType", 1, 0, "MyCustomType");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("../qml/main.qml")));
在 main.cpp 文件中,我可以像这样访问引擎的根对象:
rootObject = static_cast<QQuickWindow *> (engine.rootObjects().first());
我的问题是我需要从 mycustomtype.cpp 文件中的 MyCustomType 类中访问该 rootObject。这可能吗?
我能想到的唯一方法是将 rootObject 传递给构造函数。但由于 MyCustomType 是在 QML 文档中而不是在 C++ 代码中实例化的,因此该解决方案将行不通。
有什么想法吗?
最佳答案
我根据 GrecKo 的评论找到了解决方案。
我没有让 MyCustomType 扩展 QObject,而是让它扩展了 QQuickItem。然后可以从该类中的任何地方调用 window() 并获取根对象。这很简单而且有效。
我的自定义类型.h:
class MyCustomType : public QQuickItem
{
Q_OBJECT
public:
explicit MyCustomType(QQuickItem *parent = 0);
}
我的自定义类型.cpp
MyCustomType::MyCustomType(QQuickItem *parent) : QQuickItem(parent)
{
QQuickWindow *rootObject = window();
}
关于c++ - 从 C++ QML 类型访问 QML 根对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47629805/