自定义组件的加载问题
写了一个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文件要怎么弄呢? 来了老铁,顶顶顶顶一下 通过查文档找到问题了。
在主程序中使用QQmlApplicationEngine 的addImportPath接口时,所给参数是需要导入的插件的路径。
注:每一个插件应该是一个文件夹的形式存在,里面储存了插件的dll和qmldir文件。所以参数=包括插件文件夹的文件夹路径(例如需要使用demo/demo2/demo1这个插件,那么给demo/demo2这个路径即可
来个小伙伴回复下 问题结束了 哈哈 cai901022 发表于 2022-5-27 17:22
来了老铁,顶顶顶顶一下
老铁我怎么觉得对你好熟悉的样子 哈哈哈 失踪人口回归? z55716368 发表于 2022-5-31 10:25
老铁我怎么觉得对你好熟悉的样子 哈哈哈 失踪人口回归?
是的,失踪好久了,终于找回密码回来了:lol
页:
[1]