发布Qml宏预处理工具

32次阅读

共计 887 个字符,预计需要花费 3 分钟才能阅读完成。

为 Qml 提供部分简单的预处理命令。

0x00 初衷

  在不改变和影响原有语法的前提下提高 qml 开发效率。有一些 qml 项目兼顾与 Qt4 与 Qt5 版本,由于 QML 不用编译,但解释在运行时,使预处理指令不能用于直接通过 QML。一般采用的方法是直接改文件内容,也就仅限于部分的修改。如:
Qt4 版本下:

import QtQuick 1.0

在 Qt5 版本下要修改成:

import QtQuick 2.0

  如果能像 C /C++ 一样有预处理宏就不用那么麻烦了。本工具就是为了解决这一烦恼。

0x01 简单原理

  • 使用 python 语言实现
  • 和 C /C++ 的 #ifdef 宏使用基本一样,但需要在其前添加 // 如:
  • 然后执行脚本将会对预处理语句进行分析,对于 符合条件 的将会去除//,否则将会添加//
//#ifdef Qt4
...
//#endif

等价于 C /C++ 宏:

#ifdef Qt4
...
#endif

0x02 使用

  • 命令行运行 run.py(文末源码地址)
python run.py {qml 文件名} {宏定义(可多个)}
  • 例如:

执行前python run.py Test.qml Qt5

//#ifdef Qt4
import QtQuick 1.0
//#else
import QtQuick 2.0
//#endif

  执行后

//#ifdef Qt4
//import QtQuick 1.0
//#else
import QtQuick 2.0
//#endif

0x03 源码

https://github.com/aeagean/QmlPreprocessing

0x04 测试代码

//#ifdef Qt4
//import QtQuick 1.0
//#else
import QtQuick 2.0
//#endif

//#ifdef Qt5.7
//import QtQuick.Controls 2.0
//#else
import "Combobox"
//#endif

Item {
    width: 100; height: 100

    //#ifdef Qt5
    MultiPointTouchArea {/* Qt5 多点触控 */}
    //#endif

    ComboBox {model: ["First", "Second", "Third"]
    }
}

正文完
 0