QML 与C++函数互相调用
2017-04-05 19:30
369 查看
QML函数可在C++中调用,反之亦然.
所有的QML函数都被暴漏在了元数据系统中,并可通过QMetaObject::invokeMethod()调用.C++应用程序调用QML函数:
注意QMetaObject::invokeMethod()中Q_RETURN_ARG() 和Q_ARG()的参数必须指定为QVariant类型,这是QML函数和返回值的通用数据类型.
在QML中调用C++函数,函数必须是Qt的槽或标记了Q_INVOKABLE宏的函数,才能在QML中访问.下面范例中,QML代码调用了(使用QDeclarativeContext::setContextProperty()设置到QML中的)myObject对象的方法:
QML支持调用C++的重载函数.如果C++中有多个同名不同参的函数,将根据参数数量和类型调用正确的函数
所有的QML函数都被暴漏在了元数据系统中,并可通过QMetaObject::invokeMethod()调用.C++应用程序调用QML函数:
// MyItem.qml import QtQuick 1.0 Item { function myQmlFunction(msg) { console.log("Got message:", msg) return "some return value" } } // main.cpp QDeclarativeEngine engine; QDeclarativeComponent component(&engine, "MyItem.qml"); QObject *object = component.create(); QVariant returnedValue; QVariant msg = "Hello from C++"; QMetaObject::invokeMethod(object, "myQmlFunction", Q_RETURN_ARG(QVariant, returnedValue), Q_ARG(QVariant, msg)); qDebug() << "QML function returned:" << returnedValue.toString();
注意QMetaObject::invokeMethod()中Q_RETURN_ARG() 和Q_ARG()的参数必须指定为QVariant类型,这是QML函数和返回值的通用数据类型.
在QML中调用C++函数,函数必须是Qt的槽或标记了Q_INVOKABLE宏的函数,才能在QML中访问.下面范例中,QML代码调用了(使用QDeclarativeContext::setContextProperty()设置到QML中的)myObject对象的方法:
// MyItem.qml import QtQuick 1.0 Item { width: 100; height: 100 MouseArea { anchors.fill: parent onClicked: { myObject.cppMethod("Hello from QML") myObject.cppSlot(12345) } } } //main.cpp class MyClass : public QObject { Q_OBJECT public: Q_INVOKABLE void cppMethod(const QString &msg) { qDebug() << "Called the C++ method with" << msg; } public slots: void cppSlot(int number) { qDebug() << "Called the C++ slot with" << number; } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); QDeclarativeView view; MyClass myClass; view.rootContext()->setContextProperty("myObject", &myClass); view.setSource(QUrl::fromLocalFile("MyItem.qml")); view.show(); return app.exec(); }
QML支持调用C++的重载函数.如果C++中有多个同名不同参的函数,将根据参数数量和类型调用正确的函数
相关文章推荐
- C++ 保存在两个cpp文件中函数,怎样声明才能互相调用?
- C++与C中的函数互相调用的处理
- C/C++文件中函数互相调用
- c++中调用QML中的函数和设置QML中的属性的问题
- C语言与C++语言函数互相调用
- C++静态成员(静态成员变量、静态成员函数)与正常成员互相调用的权限问题
- C/C++文件中函数互相调用
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- C++与C中的函数互相调用的处理
- Cocos2d-x 浅谈Lua与C++函数间互相调用问题
- cocos2dx JAVA,C++互相调用函数
- QML 调用 C++ 函数不生效问题
- QML和C++代码之间互相调用及参数之间的转换
- [寒江孤叶丶的Cocos2d-x之旅_25]Cocos2d-x 浅谈Lua与C++函数间互相调用问题
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- Qt5:QML:c++ 调用qml中的函数
- C++中打印函数调用情况
- 混沌 In C++::是类型?还是函数调用?