z55716368 发表于 2022-5-19 17:59:36

自定义组件的加载问题

写了一个demo1.用于生成一个qml的自定义组件,定位是c++部分的逻辑和属性以及相关的信号。

主要demo:
#include "myitem.h"
#include "classa.h"
#include <qqml.h>

void Demo1Plugin::registerTypes(const char *uri)
{
    // @uri demo1
    //在加载的时候会进行注册
    qmlRegisterType<MyItem>(uri, 1, 0, "MyItem");
    qmlRegisterType<classA>(uri, 1, 0, "classA");
}

class MyItem : public QQuickItem
{
    Q_OBJECT
    Q_DISABLE_COPY(MyItem)

    int m_param1;
    QString m_param2;
public:
    explicit MyItem(QQuickItem *parent = nullptr);
    ~MyItem() override;

    Q_PROPERTY(int param1 READ getParam1 WRITE setParam1 NOTIFY param1Changed);
    Q_PROPERTY(QString param2 READ getParam2 WRITE setParam2 NOTIFY param2Changed);

    int getParam1() const
    {
      return m_param1;
    }
    QString getParam2() const
    {
      return m_param2;
    }

public slots:
。。。

}

qmldir文件:
module demo1
plugin demo1

然后demo2是qml的一个工程,用于实现页面的显示,并且将demo1编译生成的demo1.dll和qmldir文件进行加载,然后使用这个组件。
我尝试了在.pro中添加
QML_IMPORT_PATH = $$PWD/plugin
或者是在main.cpp中添加
QString importPath = "C:/workFiles/demo/demo2/plugin";
    engine.addImportPath(importPath);
    for(QString path : engine.importPathList()){
      qDebug() << "import path_" +path;
    }

    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, (QObject *obj, const QUrl &objUrl) {
      if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);



    engine.load(url);

在main.qml中,也可以import demo1 1.0 是正常的
但是运行时会报错
qrc:/main.qml:5:1: module "demo1" is not installed

请帮忙看一下这种加载方式正确吗。或者是哪里出了问题呢

我知道很多是将c++文件和qml放到一个工程进行注册使用,那如果出现需要引用生成的dll文件要怎么弄呢?

cai901022 发表于 2022-5-19 17:59:37

来了老铁,顶顶顶顶一下

z55716368 发表于 2022-5-23 11:29:39

通过查文档找到问题了。
在主程序中使用QQmlApplicationEngine 的addImportPath接口时,所给参数是需要导入的插件的路径。
注:每一个插件应该是一个文件夹的形式存在,里面储存了插件的dll和qmldir文件。所以参数=包括插件文件夹的文件夹路径(例如需要使用demo/demo2/demo1这个插件,那么给demo/demo2这个路径即可
来个小伙伴回复下 问题结束了 哈哈

z55716368 发表于 2022-5-31 10:25:24

cai901022 发表于 2022-5-27 17:22
来了老铁,顶顶顶顶一下

老铁我怎么觉得对你好熟悉的样子 哈哈哈 失踪人口回归?

cai901022 发表于 2022-6-8 16:02:24

z55716368 发表于 2022-5-31 10:25
老铁我怎么觉得对你好熟悉的样子 哈哈哈 失踪人口回归?

是的,失踪好久了,终于找回密码回来了:lol
页: [1]
查看完整版本: 自定义组件的加载问题