首页 > 解决方案 > 无法加载 QML 插件:无法保护模块,因为它从未注册过

问题描述

我无法从 C++ 加载 qml 文件:

QQmlComponent component(&engine, QUrl("qrc:/qml/Singletons.qml"));

在这个文件的顶部,我们有

import My.Module 1.0

错误是(component.errorString()):

plugin cannot be loaded for module "My.Module": Cannot protect module My.Module 1 as it was never registered

My.Module是一个仅包含 qml 的插件。它已使用QQmlEngine::importPlugin. qml 组件位于 qrc 中并已编译。我没有在插件本身中注册任何类型。这适用于 Qt 5.14.1,但不适用于 Qt 5.15.0

标签: c++qtqmlqt5

解决方案


原因是我没有注册任何类型,在这种情况下你需要调用qmlRegisterModule

void MyModulePlugin::registerTypes(const char *uri)
{
    Q_ASSERT(uri == QLatin1String("My.Module"));
    qmlRegisterModule(uri, 1, 0);
}

推荐阅读