发布Qml宏预处理工具

调休计算器
• 阅读 2736
为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"]
    }
}
点赞
收藏
评论区
推荐文章
小万哥 小万哥
1年前
掌握 C++ 编译过程:面试中常见问题解析
C编译过程C是一种高级编程语言,但是计算机并不能直接理解它。因此,需要将C代码翻译成计算机可以理解的机器语言。这个过程就是编译过程,是C程序从源代码到可执行文件的转换过程,包括预处理、编译、汇编和链接四个阶段。1.预处理在编译器开始编译之前
CuterCorley CuterCorley
4年前
C语言入门系列之9.预处理
在之前,已多次使用过以号开头的预处理命令,如包含命令include<stdio.h、宏定义命令definePI3.1415926535等。在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为预处理部分。一、无参宏定义1.基本使用无参宏的宏名后不带参数。其定义的一般形式为:cdefine标识符
Wesley13 Wesley13
3年前
Ubuntu SDK开发工具链的安装和使用
    Ubuntu系列现在已经发展为云、服务器、桌面、平板、手机通吃的全功能OS了,这里介绍了UbuntuSDK如何为其全面的应用开发提供支持,包括UbuntuSDK的安装以及Scope、QML和JavaScript集成应用等基本概念。   大家都知道Ubuntu是目前最好用的桌面Linux发行版(之一?),而且UbuntuServer也与Op
Wesley13 Wesley13
3年前
qml+opencv(一)
前言突然想起opencv,一直想做人脸识别,可是理论基础太水,只能慢慢来,去年学习了一会,然后公司让我去搞app和网络,就一直搁着,现在学习qml,突然想能不能在qml里面使用opencv,所以就有了这篇文章。QQuickItem和QObject在QML中,可视化的基础组件是Item,不可视化的就是QtObject,它们对应C
Stella981 Stella981
3年前
Qt类库介绍
QT类库QT核心特点QT是一个跨平台开发的类库。QT的元对象编译器MOC是一个预处理器,在源程序被编译前先将这些QT特性的程序转为标准的C兼容的形式,然后再有标准的C编译器进行编译。也就是为什么在使用信号和槽的机制的类里,必须添加一个Q\_OBJECT宏的原因,只有添加了这个宏,moc才能对类里的信号与槽代码进
Stella981 Stella981
3年前
Qt Design Studio简介及源码下载
1、简介QtDesignStudio是一款UI设计和开发工具,它让设计师和开发者可以迅速设计原型,并且开发复杂的可伸缩的UI。简单概括其功能就是让UI设计转换为qml,为工程师所用。!(https://imgblog.csdnimg.cn/20200430180720553.png?xossprocessimage/water
Easter79 Easter79
3年前
TextField实用大全
介绍TextField是QtQuickComponents中用于输入和显示单行文本的控件,通过对其属性的设置,可以实现一些特定的功能,如对输入文本的限制,拼写检查等。下文将具体介绍一些特定功能的实现。特定功能的具体实现TextField实现密码输入需要设置其echoMode属性和inputMethodHints属性,具体QML代码如
Stella981 Stella981
3年前
QML之TabWidget
转自:http://blog.csdn.net/liuhongwei123888/article/details/6174839\javascript\ viewplain(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fblog.csdn.net%2Fliuho
Wesley13 Wesley13
3年前
2. 预处理指令
2\.预处理指令2.1宏定义。define指令定义一个宏,undef指令删除一个宏2.2文件包含。include指令将包含当前文件到程序中。2.3条件编译。if、ifdef、ifndef、elif、else和endif,将根据条件包含代码块到程序当中,或将代码块排除在程序外。预定义指令的规则
Wesley13 Wesley13
3年前
QML入门教程(一)
QML是什么?QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javacript形式的编程控制。它结合了QtDesignerUI和QtScript的优点。QtDesigner可以设计出.ui界面文件,但是不支持和Qt原生C代码的交互。QtScript可以和Qt原生代码进行交互,但是有一个缺