首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问自定义类中的QQmlApplicationEngine

访问自定义类中的QQmlApplicationEngine
EN

Stack Overflow用户
提问于 2018-08-21 10:31:25
回答 2查看 1.1K关注 0票数 0

我正在用Qt编写一个使用QML的媒体播放器,我正在一个目录中提供一个歌曲的Qlist,我想将这个列表作为模型发送到QML文件,但是我不知道如何访问在我的自定义类Player中声明的引擎。

这是我的main.cpp

代码语言:javascript
复制
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

QApplication app(argc, argv);

qmlRegisterType<Player>("io.qt.examples.player", 1, 0, "Player");

QQmlApplicationEngine engine;

Player player;
engine.rootContext()->setContextProperty("player", &player); // this works fine

engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
    return -1;


return app.exec();

在我的Player类中,我想设置另一个属性,并且我找到了以下代码来帮助:

代码语言:javascript
复制
QQmlContext *currentContext = QQmlEngine::contextForObject(this); // debugger says it's null
QQmlEngine *engine = currentContext->engine(); // Segmentation fault

当调试器到达这一行时,我得到了一个分段错误错误,我已经正确地设置了一个带有文件名的QStringList,并希望这样做:

代码语言:javascript
复制
engine->rootContext()->setContextProperty("listModel", QVariant::fromValue(files));

我想用这个模型

代码语言:javascript
复制
ListView {
    id: listView
    model: listModel
    delegate: Rectangle {
        Text {
            text: modelData
        }
    }
}

但是也得到一个QML错误:ReferenceError: listModel is not defined

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-21 12:04:55

实际上,我找到了答案这里,改变了我的方法,并将QStringList模型转换为Q_PROPERTY

票数 0
EN

Stack Overflow用户

发布于 2018-08-21 10:49:09

没有完整的例子,我会尽我所能地回答这个问题。

当调试器到达这一行时,我得到了一个分段错误错误

该问题可能是该类型不是由引擎构造的。文档说:

当QQmlEngine实例化QObject时,上下文将自动设置。

所以你可能需要手动设置上下文。通常,这是通过使用由引擎构造的对象的上下文来完成的:

代码语言:javascript
复制
QQmlEngine::setContextForObject(this, qmlContext(someQmlObject))

但是也得到一个QML错误: ReferenceError: listModel没有定义

同样,我无法访问完整的示例,因此只能猜测,我的猜测是设置上下文属性太晚了。应该在加载使用它们的QML之前设置上下文属性。

不过,我建议您不要设置上下文属性,而是创建一个适当模型并将其注册为可以在QML中实例化的类型。

有关C++和QML集成的各种方法的更多信息,请查看

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51946711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档