山东省建设备案网站审批,培训机构网页设计模板,勾线外包网站,南昌网站建设q479185700惠以实际例子看qmldir的使用 1.搞一个qmldir2.让QML找到你的qmldir #xff08;重点#xff09;.pro 工程文件QQmlApplicationEngine加载主QML处 3.用起来你的模块 qmldir是Qt QML模块化的基石#xff0c;其设计初衷是为解决QML文件的组织、复用和依赖管理问题,。只需要在每个… 以实际例子看qmldir的使用 1.搞一个qmldir2.让QML找到你的qmldir 重点.pro 工程文件QQmlApplicationEngine加载主QML处 3.用起来你的模块 qmldir是Qt QML模块化的基石其设计初衷是为解决QML文件的组织、复用和依赖管理问题,。只需要在每个文件夹内部搞一个qmldir在任意qml里import之就能随意使用这个qmldir下的任何qml文件啦模块化管理还是很方便的 众所周知把大象塞进冰箱只需要三步所以qmldir的使用也只需要三步
1.搞一个qmldir 我一般会在qrc文件处右键新建你也可以自己安排 我这里项目目录组织是
根目录
|
|--工程.pro文件
|--interface # 专门存放QML文件
| |--xxx.qrc
| |--BarCustom
| |--qmldir #每个组件目录下一个qmldir
| |--StatusBar.qm
| |--TitleBar.qml
| |--TopBarDefines.qml
......注意qmldir的模块名要和该文件夹名一样方便QML引擎找到qmldir文件 然后在qmldir填入你要声明的内容、暴露出去使用的qml
# 模块名
module BarCustom # 注意要和文件夹名一样#命名方式 类名 版本 文件名
StatusBar 1.0 StatusBar.qml
TitleBar 1.0 TitleBar.qml
#QML的单例声明需要在.qml头部写pragma Singleton
singleton TopBarDefines 1.0 TopBarDefines.qml 相当于告诉QML引擎我这里有一个模块叫BarCustom 里面有StatusBar 1.0 版本TitleBar 1.0版本… 2.让QML找到你的qmldir 重点
分别需要改两个东西一个是 .pro 文件一个是 main主程序入口的QQmlApplicationEngine处调用addImportPath。 QML引擎是根据{QML_IMPORT_PATH}\文件夹名去搜索你的qmldir的比如说你要引用的BarCustom的qmldir 路径是:
E:\SoureCode\myProject\interface\BarCustom\qmldir那你就要让QML知道qmldir搜索路径在
{QML_IMPORT_PATH}\interfaceqrc:/ 也是如此:
qrc:/UI/ # UI/是我工程里创的因 .qrc文件就在interface/下所以指的就是interface/按实际情况来下面会讲.pro 工程文件
参考我上面给的目录结构后填这个即可如果你的组件文件夹直接在项目根目录就$$PWD即可
QML_IMPORT_PATH $$PWD/interface/QQmlApplicationEngine加载主QML处
这里我是在main.cpp里加载主QML根据你的实际情况来就行
QQmlApplicationEngine engine;
engine.addImportPath(qrc:/UI/);值得注意的是这个qrc路径怎么填因为实际上它是按你实际目录配置走(如果你是接手别人的项目那你需要注意这点)。 什么意思呢 比如说我加载某一个qml界面用的是
settingPage.source qrc:/UI/Setting/MainSetting.qml虽然这时候我实际目录结构里并没有UI/ 但这个UI/ 是项目管理时加的层级所以在addimportPath时也要加上该目录
engine.addImportPath(qrc:/UI/);当然也可以直接看你的 .qrc 文件是怎么填的最终目的都是根据文件夹名找到对应qmldir
这一步如果没填对会报找不到该模块的可以用以下方法打印看看模块加载路径.pro文件 编译窗口打印
message(QML_IMPORT_PATH: $$QML_IMPORT_PATH).cpp 运行打印
// 获取并打印QML_IMPORT_PATH
QString importPath qEnvironmentVariable(QML_IMPORT_PATH);
qDebug() QML_IMPORT_PATH: importPath;似乎只有engine.addImportPath(“qrc:/UI/”);有效pro文件里就算指定了所在的绝对目录都不行还是说我配置有误欢迎评论区指正一起进步 3.用起来你的模块
在要使用的qml里添加 import xxxxx(模块名) 1.0(版本号)即可。 如
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import BarCustom 1.0 //xxxxx(模块名) 1.0(版本号) 都是你qmldir声明的内容
就可以愉快使用你模块下声明的任意一个qml啦
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import BarCustom 1.0 Rectangle {color: TopBarDefines.subColorStatusBar{//...}TitleBar{//......}
}/**********我qmldir的内容***********/
//定义模块名
module BarCustom # 注意要和文件夹名一样//命名方式 类名 版本 文件名
StatusBar 1.0 StatusBar.qml
TitleBar 1.0 TitleBar.qml
//QML的单例声明需要在.qml头部写pragma Singleton
singleton TopBarDefines 1.0 TopBarDefines.qml
/***********************************/当然每次新添文件后我都习惯重新构建一次这样能确保编译到位