Q_INVOKABLE是一个Qt元对象系统中的宏,用于将C++函数暴露给QML引擎。具体来说,它使得在QML代码中可以直接调用C++类中被标记为Q_INVOKABLE的成员函数。
通常,在C++和QML之间进行交互需要使用QObject派生类。但是,并非所有QObject派生类中的所有成员函数都可以在QML中使用。这时候,我们就需要使用Q_INVOKABLE来标记那些想要暴露给QML的函数。
例如,假设我们有一个名为MyClass的C++类,其中定义了一个doSomething()函数:
class MyClass : public QObject {
Q_OBJECT
public:
MyClass(QObject *parent = nullptr);
Q_INVOKABLE void doSomething();
};
现在我们可以在QML中实例化MyClass并调用doSomething()方法:
import QtQuick 2.0
Item {
id: myItem
Component.onCompleted: {
var myObject = new MyClass();
myObject.doSomething();
}
}
需要注意的是,只有成员函数被标记为Q_INVOKABLE才能够在QML代码中直接调用。如果没有标记为Q_INVOKABLE,则会导致编译错误或运行时异常。