创建模块
①在工程文件(.pro)同级目录下创建目录(qml_modules)----用于存放所有模块
②在qml_modules目录中创建目录(BinUI)用于存放我们的模块程序
③在BinUI目录下创建三个文件,如下图所示
a)BinUI.pri 用于引入到工程中
b)BinUI.qrc用于管理我们所有qml资源
c)qmldir 用于管理是否暴露我们的qml资源供外部使用
引入模块
在main.cpp中,加入此行代码用qml工程能够解析我们的模块
注意,而且必须放在engine.load(QUrl(QStringLiteral(“qrc:/main.qml”)));之前
否则,报错qrc:/main.qml:3 module “BinUI” is not installed
engine.addImportPath(":/qml_modules/");
在工程文件中,
include($$PWD/qml_modules/BinUI/BinUI.pri)
QML_IMPORT_PATH = \
$$PWD/qml_modules \
完成以上两步,项目已经包含了模块进去了,如下图:
在模块中创建一个自定义控件
①因为考虑一些组件可能由多个qml文件构成;
②所以我们再BinUI目录下面最好创建一个目录代表一个组件
以一个按键为例子,我们在BinUI目录下创建button目录
此目录里面创建BinButton.qml组件,如下图
简单的测试所以我们先随便往BinButton.qml里面写入一些东西
BinButton.qml代码如下
import QtQuick 2.12
import QtQuick.Controls 2.12
Button{
}
完成以上还不行,还记得我们有个qmldir文件吗? 这个文件就是管理我们想要暴露出去的组件,
给外部调用。
所以我们需要
使用模块中的组件
那么回到main.qml文件中我们进行调用试试吧!
①先引入模块,就好比我们引入import QtQuick 2.12 才可以使用QtQuick 模块里面的东西
我们也需要同样的方法引入模块,在调用组件
这里注意一下,很多人遇到一种情况,BinButton显示灰的,没高亮,好像没引入成功一样,
先别急,你就这样运行,你会发现也能跑, 这是什么原因呢?
就只是qtcreator 没反应过来,很简单重启qtcreator,你会发现它高亮了
代码已经上传gitee,有意思的自行下载查看;源码