[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有两种设置插件导入默认路径的方法:

扫描二维码关注公众号,回复: 11421287 查看本文章

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文件 等等

猜你喜欢

转载自blog.csdn.net/ykun089/article/details/107249695