[Qt] qmldir文件说明

前沿:

制作Qt插件时会用到qmldir文件,此文件用来描述插件的相关信息,当我们在qml中使用import语句时入股采用 uri 方式导入模块,则需要模块路径下有对应qmldir文件。(另一种import方式为路径导入)

回忆:插件分为两种,一种是c++生成的dll文件,一种是qml文件,这两种插件都需要qmldir来描述,以便import的动作能够正确工作。

module 是指包含 dll lib qml qmldir ... 文件的 “文件夹” , 插件也是一种模块,因此也需要具备qmldir文件。

 

正文:

下面内容采自官方help文档,这里只是做一个翻译和归纳总结以方便后期查阅。

语法说明
module <moduleidentifier>

描述当前模块的import路径, <moduleidentifier> 是 点号 样式的 URI 路径,比如 com.obt.myplugin , 这个路径必须是当前模块的 import路径,比如:

如果我们定义了一个插件,在其qmldir文件中设置 module com.obt.myplugin,那么module(包含qmldir dll lib qml ... 的文件夹)的路径必须像这样的  C:\Qt\Qt5.12.6\5.12.6\msvc2017_64\com\obt\mylugin , Qt的安装路径一般都是Qt工程运行时的默认搜索插件路径,所以只需要把dll lib qml qmldir 等文件放到  C:\Qt\Qt5.12.6\5.12.6\msvc2017_64\com\obt\mylugin  目录下,然后在使用时 import com.obt.myplugin 1.0 既可使用此插件。

 

ps:在非开发环境中,我们一般需要制定工程搜索插件的默认路径,因为运行环境不可能都安装了Qt,那么我们在编写 <moduleidentifier> 的时候就需要结合插件在解压工程中的位置 和 当前工程的插件导入路径来解决导入问题。

 

Qt有两种设置插件导入默认路径的方法:

1)工程pro文件中设置 QML_IMPORT_PATH 变量;

2)通过addImportPath设置路径,一般都设置为工作目录,因为插件一般都是伴随安装包安装的,所以一般都在exe的同级路径下。

 

如果插件存在层级关系,那么可以用addPluginPath用来设置qmldir的搜索路径

 

注意:此条语句必须写在qmldir文件的第一行

[sigleton] <typename> <InitialVersion> <File>

如果插件中包含qml文件,则可以通过此语法声明此文件可用,那么在使用此qml文件的时候只需要import <moduleidentifier> 即可使用到此qml文件。

  • [sigleton]    此qml文件是否是单例模式运行在engine中
  • <typename>   在qml中使用此qml文件时的组件类型
  • <InitialVersion>   版本号
  • <File>  和qmldir同级路径下的qml文件名

此条目可以有 0~N 条,但是这些条目的 <typename> <InitialVersion>  在一起不能重复

 

如果是单例,则所有使用此qml组件的地方用的都是同一个实例。

 

例子:

//Style.qml START
pragma Singleton     //表示Style.qml是单例
import QtQuick 2.0
QtObject {
    property int textSize: 20
    property color textColor: "green"
}
//Style.qml END
// qmldir START
module CustomStyles
singleton Style 1.0 Style.qml
//qmldir END

//USE START
import QtQuick 2.0
import CustomStyles 1.0

Text {
    font.pixelSize: Style.textSize
    color: Style.textColor
    text: "Hello World"
}
//USE END
internal <TypeName> <File>

和上面类似,只不过这里相当于加了个不可直接调用限制,有人可能会疑惑,既然不让用那么干脆就别写到qmldir文件中就好了。

其实这样做是有特殊用途的,在远程调用qml文件的时候会使用到。

<ResourceIdentifier> <InitialVersion> <File>

定义一个javascript资源,例子:

MyScript 1.0 MyScript.js

 

这里把MyScript.js文件定义为MyScript类型,那么可以在qml中卡伊通过MyScript类型名实例化MyScript.js

 

plugin <Name> [<Path>]

插件名称,c++插件的输出一般是动态库,windows下是dll文件,linux下是so文件,这里的Name就是指这些文件的名称,比如:

plugin myplugin

对应的就是

windows : myplugin.dll

linux: libmyplugin.so

 

这个条目用来说明插件二进制文件的名称。

classname <c++ plugin class>如果当前插件集合中的qml依赖其他c++插件,则需要在此注明
typeinfo <File>

指明当前插件对应的 .qmltypes 文件是什么,只有有完好的 .qmltypes文件,Qt Creator才能对此插件中的组件进行语法补全和语法高亮。

 

注:其实.qmltypes文件中的内容和头文件比较像,其通过类似qml的语法罗列了每个组件类型有哪些属性和方法

depends <ModuleIdentifier> <InitialVersion>描述当前插件以来哪个/些其他模块,当然也要遵循插件搜索基础路径的搜索方式,所以这里的<ModuleIdentifier>也是点号分割的URI
# <comment>注释 ,#开头

 

小结:

其实最主要的就是module <moduleidentifier>,这一行决定了import的时候怎么写,当import到module后,接着就可以直接访问其文件夹中的 qml文件  js文件   dll文件 等等

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt Application文件是一种用于创建Qt应用程序的文件。在Qt中,有多种类型的Qt Application文件可供选择,包括Qt Widgets Application、Qt Console Application、Qt Quick Application等。\[2\]其中,Qt Console Application是一个创建一个包含单个main.cpp文件的项目的模板,该文件中包含了一个存根实现。存根实现是指函数体内没有任何语句的函数。\[1\]Qt Application文件支持在桌面平台上构建应用程序,并提供了一些预选的Qt桌面选项。\[1\]如果你想创建一个空的Qt Quick Application文件,你可以选择文件 -> 新建文件或项目 -> Application (Qt Quick) -> Qt Quick Application - Empty,并按照流程修改项目目录、名称、编译器等。\[3\] #### 引用[.reference_title] - *1* *2* [【QtQtCreator新建Application项目的6类应用程序的示例](https://blog.csdn.net/jn10010537/article/details/128605689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【QtQt Creater创建一个Qt Quick Application](https://blog.csdn.net/See_Star/article/details/114295381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值