ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

qt qml控件编译成dll并调用 (VS2017)

2021-06-17 16:31:11  阅读:449  来源: 互联网

标签:控件 assembly qt 编译成 dll qml 模块 test mymodule


简要记录一下Qt中关于qml编辑的控件编译进dll 供第三方调用的例子

sample地址:https://github.com/tlglovewf/qmldlltest.git  (sln是vs2017创建的,其他版本自行修改一下相关工程文件把)

最主要的就是

qml项目中

qmldir :用于定义模块插件基本信息

module test.mymodule  //这个表示模块信息(很关键,之后dll路径相关)
plugin qml            //导入插件模块的名称

qmlplugin_plugin.h/cpp: 用于导出*.qml文件

class QmlpluginPlugin : public QQmlExtensionPlugin
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)

public:
    void registerTypes(const char *uri) override;
};

void QmlpluginPlugin::registerTypes(const char *uri)
{
    // param QUrl("qrc:/xxxx.qml") 是自定义组件的.qml文件地址
    // param 注册到URL
    // param 主版本号
    // param 次版本号
    // param 外部使用的类型名
    qmlRegisterType(QUrl("qrc:/QuickMirrorTypes/RedRect.qml")					 , uri, 1, 0, "RedRect");
    qmlRegisterType(QUrl("qrc:/QuickMirrorTypes/BlueRect.qml")					 , uri, 1, 0, "BlueRect");

}

然后是assembly目录,这个目录就是用于生成可调用模块的目录结构

test/mymodule 这个目录对应之前qmldir中的 test.mymodule

讲qmldir还有编译生成的dll放到这个目录下

目前还不能直接调用这个dll还需要一个module文件的过程

可以查看qml项目中属性->生成事件->后期生成事件

xcopy "$(ProjectDir)QuickMirrorTypes\qmldir" "$(SolutionDir)assembly\test\mymodule\qmldir" /s /y
copy "$(TargetPath)" "$(SolutionDir)assembly\test\mymodule\$(TargetFileName)"  
qmlplugindump test.mymodule 1.0 $(SolutionDir)assembly > $(SolutionDir)assembly\module.qmltype

上述两句是为了拷贝文件到指定模块目录下,最后一句则是调用qt的plugindump工具生成模块文件(非常的关键)      ps:如果这句生成报错 多半是工具找不到 qt的环境变量没有加到path路径

如果这步生成环境不匹配的问题,可能是你生成了debug的dll  先生成一个release的库然后生成玩qmltype文件之后  再替换debug使用也行

至此打包至dll的工作已经完成 剩下就是调用

直接查看test项目中的main.cpp 即可

主要是下述语句

engine.addImportPath("../assembly");//导入上述生成的模块文件夹

然后就可以调用了

import QtQuick 2.12
import QtQuick.Window 2.12
import test.mymodule 1.0    //引入模块

Window {
    visible: true
    width: 680
    height: 480
    title: qsTr("Hello World")
    //使用模块中的qml控件
    BlueRect
    {
		x: 20
		y: 30
        width: 300
        height: 100
    }

    RedRect
    {
	x: 350
    	y: 30
	width: 300
	height: 100
    }
}

 

标签:控件,assembly,qt,编译成,dll,qml,模块,test,mymodule
来源: https://blog.csdn.net/tlglove326/article/details/117995812

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有