关于Qt的Qml中支持注册的C++接口函数重载的问题

最近在在用Qt开发安卓程序,正式将qml投入项目实战当中,发现用qml来构建APP的界面,用C++来实现业务逻辑和数据处理,还是比较相当给力的CP

由于QML主要是采用了javascript的语法和类css的语法结合,支持ECMASCRIPT5标准,所以在qml'里面支持几乎所有的JavaScript的语法和类库,所以说qml

不仅仅是像java安卓里面的xml那样简单的画界面的功能,它还可以实现界面层次的逻辑处理和数据传送,这得归功于js的强大,js有多强大这里我就不说了。

    好像说的有点多了,还是进入正题吧。

    正如标题所示,之前对qml调用的C++接口函数,这里的接口函数是否可以是重载的有疑问,为什么呢?

    相信用qml的人都会知道,要想在qml中调用C++接口,必须用qmlRegisterType注册函数的类,或者QQmlContext的QQmlContext注册上下文属性,然后在函数的声明处要用

Q_INVOKABLE 加在函数声明前面Q_INVOKABLE int initType(int type);然后就可以在qml中调用了

   但是由于js是弱类型的,它怎么区分当前调用的是哪个接口呢,所以我会产生上面的疑问,但是事实证明Qt会去识别的

笔者在这里特地做了一个实验,定义了Q_INVOKABLE  void reloadTest(QStringList)   和  Q_INVOKABLE  void reloadTest(QString)  


然后在qml中去调用,分别 reloadTest(["www","csdn","com"])和reloadTest("CSDN");

前者调用了Q_INVOKABLE  void reloadTest(QStringList)

后者调用了 Q_INVOKABLE  void reloadTest(QString)  

具体是怎么区分调用了哪个的,我就不详细说了,最简单的方法就是在两个不同的方法中添加不同的打印信息就可以

你可能感兴趣的:(关于Qt的Qml中支持注册的C++接口函数重载的问题)