当前位置: 首页 > news >正文

惠城网站制作彩灯制作公司

惠城网站制作,彩灯制作公司,机加工如何用网站开发客户,忽悠别人做商城网站Qt Quick的插件方法 序言环境前置注意概念——Qt Quick插件的相关知识插件里的qml文件模块名的相关知识模块名本身注意事项模块名版本注意事项 以示例来说明创建插件qmltypes的生成qmltypes的可能性失效 插件的编码注意1、插件模块版本控制2、pro里的注意 调用插件插件信息输入… Qt Quick的插件方法 序言环境前置注意概念——Qt Quick插件的相关知识插件里的qml文件模块名的相关知识模块名本身注意事项模块名版本注意事项 以示例来说明创建插件qmltypes的生成qmltypes的可能性失效 插件的编码注意1、插件模块版本控制2、pro里的注意 调用插件插件信息输入 序言 网上有很多的Qt Quick扩展插件方法比如龚建波或者诺谦的确实是教了怎么做可是还是按着做时还是出现了一些问题有些细节上的理解容易与作者想的不一样对于新手不太友好不够简单和全面起码我看着没有第一时间弄出来还花了不少时间研究才最终弄出来。 因此我作为更新手的视角也来写一下插件的用法以供学习的人分别参考。 如果有兴趣我后面也可以出C的插件方法不过感觉资料很多没什么必要。 环境 Qt5.15(MSVC2019) VS2019 前置注意 示例插件名 TestQmlPlugin 模块名QmlEditorStyle 插件库名TestQmlPlugin 概念——Qt Quick插件的相关知识 Qt的插件有一个很大的特点就是不需要lib文件只需要dll文件就可以进行动态装载。 如果是C会需要QPluginLoader进行加载不过其实也是用的QLibrary。 QML不需要自己来加载因为Engine已经负责了这个加载任务。 不过相对的Qt Quick也需要一些信息比如插件的外接接口的信息我们提供的就是一个名为qmldir 的文件无.txt.pri那些后缀就叫qmldir 关于qmldir里面该怎么写Qt的助手就已经有相关说明 具体有什么可以自行翻找查阅但是qmldir最起码需要两条信息也是我演示用的其中两条 一个交代了QML的import时的模块名另一个交代了插件库的库名。 举例 qmldir文件里只有两行信息 module QmlEditorStyle plugin TestQmlPlugin而其分别影响的是 module QmlEditorStyle - import QmlEditorStyle 1.0. plugin TestQmlPlugin - TestQmlPlugin.dll TestQmlPlugind.dll . 插件里的qml文件 有些人会想将QML文件放进插件里这样调用的时候就可以拿着dll随便用了。 可惜实现不了。 插件本质上是一种特殊的动态库动态库你我都懂如果需要调用动态库里面的类就需要提供一些接口.h文件。 然后编码时才可以自由访问提供的接口类。 同理你要调用QML文件就必须要有接口可怎么提供接口呢QML文件就没有分什么.h文件.cpp文件它是解释型语言就算用插件你也需要提供源码才可以。 除非你用C实现QML的项然后封装进插件里再放出.h文件即可。(因为QML的项本质上是QtC的实现而来的。) 将自己封装好的QML文件放在插件库文件夹里即下文会提到的QmlEditorStyle文件夹里。 再将qmldir文件夹的末尾加上资源标识符 注册的版本 对应文件 其对应的就是 qmlRegisterTypeMySliderItem(QmlEditorStyle, 1, 0, Slider);ResourceIdentifier对应的是Slider注册的QML类型 InitialVersion对应的是1, 0C是1逗号0qmldir是1点0 File对应的是MySliderItem实际的QML文件C的是实际的C类 module QmlEditorStyle ... Slider 1.0 MySliderItem.qml不过一般都会文件和类型名一致。 这样就算是将QML文件放进插件库里了当调用该文件夹的插件时也会囊括QML文件了。 模块名的相关知识 Qt Quick的import模块名值得注意的是其代表的其实是文件夹名什么意思呢 比如说QtQuick.Window 2.15这个import的模块实际代表的是QtQuick文件夹里的Window.2文件夹 Creator会根据这个从路径信息里找到对应的文件夹找到对应的plugins.qmltypes文件和qmldir文件进而读取进来。 模块名本身注意事项 有的人可能要自己定义一个插件库比如说[公司名].[库名] 然后就打算这样命名文件夹Company.TestQmlPlugin 这样是行不通的Creator会找不到插件库的你得改成 Company文件夹里放TestQmlPlugin文件夹 模块名版本注意事项 那么如果说我们导入示例插件TestQmlPlugin呢 比如说import TestQmlPlugin 1.0 就直接是TestQmlPlugin文件夹里放就行后面的.1可加可不加没有会默认按.1处理 如果是import TestQmlPlugin 2.0 就需要命名为TestQmlPlugin.2文件夹这个不能缺少后面的.2。 . 另外还需要一个文件plugins.qmltypes其提供给Creator提示信息是由我们用qmlplugindump生成的或者qmake的里面设置一些东西可以自动生成。 基本这些加上库文件就组成了一个插件。 以示例来说明 创建插件 按选择创建插件的这个工程名与提供出来的插件名不影响 选择qmake还是cmake进行编译Qt6只运行用cmake如果用QML以后考虑用Qt6的就选择cmake。 但是呢这里现在暂时只讲解qmake方法cmake待后续添加。 接下来选择一些基本信息如最低Qt版本这些URI的com.mycompany.qmlcomponents可以改为我们示例用的模块名QmlEditorStyle或者你打算设置的模块名。 . . 如此就生成了初始的插件 进行构建就可以生成debug版本或者release版本这些的dll了。 不需要在意debug版本dll名是否会因为有个d后缀而影响的问题Qt在读取的时候会自动判断的了。 将构建好的dll和qmldir放进由模块名为文件夹名的文件夹里。 qmltypes的生成 在该文件夹的上一级用cmd输入 qmlplugindump QmlEditorStyle 1.1 . .\QmlEditorStyle\plugins.qmltypes其的输入规则是 qmlplugindump空格[模块名]空格[版本]空格[模块所在目录]空格 空格[要生成的路径] 需要注意的是[模块所在目录]是指以模块名为文件夹名的文件夹所在目录即QmlEditorStyle文件夹。 生成之后会在模块文件夹里即QmlEditorStyle生成一个plugins.qmltypes是qmlplugindump根据插件里注册的内容生成的信息。 qmltypes的可能性失效 1、生成了plugins.qmltypes可能是缺少信息的也可能是我指令有误之类的吧但是参考别人的也都是相同的。 注意上方的exports这行信息在每个MyItem的左边需要加上模块名QmlEditorStyle/MyItem 1.1 这样才能生效 2、如果上方加上了模块名仍然Creator提示无效则在qmldir里新增一行 typeinfo plugins.qmltypes不过一般来说加不加不影响 3、如果上边的都弄了之后发现在导入的地方存在一个错误提示 Error 1:1 预计符号numeric literal 这是编码问题我遇到了发现plugins.qmltypes是utf-16格式的于是我转成了utf-8格式的就正常了 . 插件的编码注意 1、插件模块版本控制 Qt Quick的模块版本是由注册到该版本的项决定是否存在的。 什么意思呢 testqmlplugin_plugin.cpp里有个代码 void TestQmlPluginPlugin::registerTypes(const char *uri) {qmlRegisterTypeMyItem(uri, 1, 0, MyItem); }uri代表的是会传入你编写的模块名比如说该示例是QmlEditorStyleuri也是这个值。 第二个参数是主版本号第三个参数是次版本号。 就是import QmlEditorStyle 1.0里的1是主版本号0是次版本号。 这样将MyItem注册在了1.0这个模块里1.0就存在了一个MyItem的项。 你如果后面都弄好后平白无故去导入1.1模块也是不存在的会提示不存在这个模块因为里面不包含任何项。 2、pro里的注意 TEMPLATE lib TARGET TestQmlPlugin // 插件的dll名称 QT qml quick CONFIG plugin c11TARGET $$qtLibraryTarget($$TARGET) uri QmlEditorStyle // 代表着模块名一般用不上此处如果额外增加下列代码 CONFIG qmltypes #自动生成 plugins.qmltypes QML_IMPORT_NAME TestQmlPlugin QML_IMPORT_MAJOR_VERSION 1就会自动在构建之后产生一个plugins.qmltypes代码了可以免掉后面再自行命令行用qmlplugindump了。 不过要自行更改QML_IMPORT_MAJOR_VERSION版本其代表的是主版本号。 . 调用插件 接下来就是怎么去使用我们的插件了 首先在上文生成插件后有一个QmlEditorStyle的文件夹。 将这个文件夹放到使用的工程文件下专门放QML插件的一个文件夹下我这里是qml文件夹你也可以命名为DLL或者其他什么的名字不影响。 插件信息输入 有两处需要填写插件信息的 第一处是pro里有个QML_IMPORT_PATH增加qml所在路径。 QML_IMPORT_PATH C:/Project/Qt/build-testQtQML-Desktop_Qt_5_15_2_MSVC2019_32bit-Release/release/qml我这里放的是生成的目标路径位置也可以放工程里是一样的不影响。 第二处是在main.cpp里有个engine调用engine增加插件路径。 QQmlApplicationEngine engine; engine.addImportPath(QString(%1/qml).arg(app.applicationDirPath())); // 可以用绝对路径之类的指向qml文件夹 const QUrl url(QStringLiteral(qrc:/main.qml)); ...第三处是调用处的qml里 import QtQuick 2.15 import QtQuick.Window 2.15 import QmlEditorStyle 1.1 // 调用对应的模块Window {width: 640height: 480visible: truetitle: qsTr(Hello World)MyItem { // 使用默认提供的C的Itemwidth: 100height: 100fillColor: red} } 上边如果import QmlEditorStyle 1.1或者MyItem有报错则是没有配置好。 如果能正常运行则是plugins.qmltypes没有弄好。 以上全部都弄好后应该是这样的 正常显示无报错 item能正常显示 至此Qt Qucik的插件方法教程结束。
http://www.zqtcl.cn/news/820670/

相关文章:

  • 厦门的网站建设公司徐州城乡建设局网站
  • 天津圣辉友联网站建设南昌本地生活网站有哪些
  • 境外社交网站上做推广上海网站建设的价格低
  • 山西专业网站建设大全高校网站群建设研究
  • 网络营销网站建设流程网站功能设计指什么
  • 企业网络推广网站琼海市建设局网站
  • 移动网站搭建网页设计页面设计
  • 建设网站进行商品营销的重要性恢复正常百度
  • 美容会所网站模板下载jsp网站开发实现增删改查
  • 注册网站需要注意什么深圳建站公司兴田德润官网多少
  • 广东网站优化布吉做棋牌网站建设有哪些公司
  • 联邦快递的网站建设图书馆建设网站注意点
  • 西安好的皮肤管理做团购网站wordpress stats
  • 文山 网站建设 滇icp卡盟网站顶图怎么做
  • 北京网站建设公司哪些好电商建站
  • 沈阳百度广告广州营销seo
  • 营销型企业网站建设步骤做网站怎样和客户沟通
  • 多媒体教学网站开发的一般步骤网络公司网站赏析
  • 阿里云手机网站建设多少钱wordpress幻灯片制作
  • 个人博客网站下载公司邮箱免费注册
  • 厦门外贸网站建设多少钱wordpress 增大字体
  • 可以做外链的网站有哪些外贸阿里巴巴国际站
  • 潮安区住房和城乡建设局网站网站开发技术分析
  • 网站跳出率因素建设单位应该关注的网站
  • php开发的大型金融网站有哪些网站开发可以自学吗
  • 个人建网站成本wordpress 增加阅读量
  • wordpress构建自己的网站大连网站建设主页
  • 棋牌网站开发工程师网站app制作费用单
  • 为什么做网站比app便宜精准营销服务
  • 网站平台做捐助功能有风险吗wordpress博客 翻墙