【发布时间】:2018-05-17 17:00:13
【问题描述】:
我有一个用 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++ 代码中实现的,因此该解决方案将不起作用。
有什么想法吗?
【问题讨论】:
-
为什么需要访问根对象?这将有助于回答您的问题。您需要访问对象的父级吗?您在根对象中添加的一组属性?访问应用程序窗口?能否调用根的信号或函数?等
-
MyCustomType 正在使用 GStreamer 设置视频流,我需要使用 rootObject (QQuickWindow) 中的方法 scheduleRenderJob 启动管道。
-
如果您的类型是
QQuickItem,您可以使用QQuickItem::window()访问呈现项目的窗口。