3.qml与c++模块化开发

模块化开发

什么是模块化开发呢?

举个例子:
我们有一台台式电脑,我们台式电脑有显卡,内存,磁盘,cpu,键盘,鼠标等
你可以将这些部件当做模块
我们鼠标坏了换鼠标,我们显卡坏了换显卡
以前是焊死在一起的,坏了一块就得全部丢了,现在不一样了,模块化合并?
哪里坏了,替换哪里,哪里更新换代了,我们买个新的换上去就行了?

好了,说回代码,无论是c++,还是qml模块化管理
都离不开 .pri文件 有了它我们可以快速引入到自己的项目中,我们只需要拷贝某个模块项目的程序
然后在我们的程序里面,在工程文件.pro里面使用

include($$PWD/???/demo.pri)

如果是c++模块那么直接用就可以了
如果是qml模块那就我们的main.cpp里面多做一点处理

封装c++模块并使用

请参考跳转

封装qml模块并使用

而qml模块化开发主要围绕着两个问题展开细说
①QML module not found
②QML module not installed

qml模块化开发有两个方法
1)封装qml扩展插件
a) 纯c++扩展插件,里面都是继承qquickitem 或者 qquickpainteditem 封装的组件,通过qmlregistertype注册到项目中,最终打包成一个静态库或者动态库
b) 含有qml的扩展插件,实际封装方式跟纯c++差不多,都是打包成一个库,但是如果扩展插件携带了qml也要一并输出
--------------------------后续补充

2)单纯源码模块化

├── po-ui.pro
├── po-ui.pro.user
├── src
│ ├── qml
│ │ ├── Potato
│ │ │ ├── Controls
│ │ │ │ ├── Button
│ │ │ │ │ └── Button.qml
│ │ │ │ ├── Controls.pri
│ │ │ │ ├── potato-controls.qrc
│ │ │ │ ├── qmldir
│ │ │ │ └── theme
│ │ │ └── Potato.pri
│ │ └── qml.pri
│ └── src.pri
└── test
├── main.cpp
├── main.qml
├── qml.qrc
└── test.pri

我们的项目结构应当如上述所示
我们的源码都会存放到src目录下
而src目录下有个目录专门管理qml库资源(非views界面,views界面应当是跟qml同级目录,views就是程序渲染界面)

qml作为自定义三方qml库资源搜索路径,所以
qml.pri

# ①用于mian.cpp中engine.addImportPath(QML_IMPORT_PATH);
# 解决QML module not installed
DEFINES = QML_IMPORT_PATH=\\\"$${PWD}\\\"

# ②高亮,解决QML module not found
QML_IMPORT_PATH += $$PWD

# ③以下则引入模块资源
include($$PWD/Potato/Potato.pri)

main.cpp 安装qml库资源

    QQmlApplicationEngine engine;
    engine.addImportPath(QML_IMPORT_PATH);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

引入模块

import 的模块名跟跟qmldir里面定义的module 后面接的名字有关系吗?
并没有关系,你甚至不写module 都可以
那import 后面接的模块是怎么来的?
应该是根据qmldir文件在目录中的结构而来,Potato目录-》Controls目录 -》qmldir
故Potato.Controls
在这里插入图片描述
在这里插入图片描述
使用自定义模块应当加入别名as Po
因为自定义qml文件命名可能跟官方自带组件的可能重名,会导致混乱使用,使得代码增加隐患

import QtQuick 2.12
import QtQuick.Window 2.12
import Potato.Controls 1.0 as Po



Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Po.Button{
        text: qsTr("open")
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱搞事的程小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值