c++ - 从 C++ QML 类型访问 QML 根对象

标签 c++ qt qml

我有一个用 C++ 编写的自定义 QML 类型,类名是 MyCustomType,它位于文件 mycustomtype.hmycustomtype.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/

相关文章:

python - PySide2 + QML : QApplication: invalid style override passed, 忽略它

C++ 静态和动态数组初始化

c++ - 使 QDialog 只读,但仍然可以选择文本

c++ - 当我已经初始化了指针属性时,如何将 QGraphicsItem 向下转换为创建的类?

android - Qt API 获取应用程序用户数据在 iOS 和 Android 上的保存位置

qt - 在 QML 中动态创建按钮

c++ - Having trouble importing function from C++ dll 错误 LNK 2019

c++ - 相机的旋转方向在一段时间后自行反转

c# - 枚举 COM/DCOM/COM+ IN_PROC 实例

c++ - ubuntu sdk qml 快速查看窗口关闭,最小化按钮不可见