前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >发布Qml宏预处理工具

发布Qml宏预处理工具

作者头像
Qt君
发布2019-11-10 15:44:46
1.3K0
发布2019-11-10 15:44:46
举报
文章被收录于专栏:跟Qt君学编程

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

0x00 初衷

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

代码语言:javascript
复制
import QtQuick 1.0

在Qt5版本下要修改成:

代码语言:javascript
复制
import QtQuick 2.0

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

0x01 简单原理

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

等价于C/C++宏:

代码语言:javascript
复制
#ifdef Qt4
...
#endif

0x02 使用

  • 命令行运行run.py(文末源码地址)
代码语言:javascript
复制
python run.py {qml文件名} {宏定义(可多个)}
  • 例如: 执行前python run.py Test.qml Qt5
代码语言:javascript
复制
//#ifdef Qt4
import QtQuick 1.0
//#else
import QtQuick 2.0
//#endif

  执行后

代码语言:javascript
复制
//#ifdef Qt4
//import QtQuick 1.0
//#else
import QtQuick 2.0
//#endif

0x03 源码

代码语言:javascript
复制
https://github.com/aeagean/QmlPreprocessing

0x04 测试代码

代码语言:javascript
复制
//#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"]
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 初衷
  • 0x01 简单原理
  • 0x02 使用
  • 0x03 源码
  • 0x04 测试代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档