我编写了一个C ++插件,为QML公开了一个C ++ MyCppClass
。 Q_INVOKABLE
函数有效,但我无法“看到”相同实例的任何Q_PROPERTY
属性。
假设一个微不足道的MyCppClass
:
class MyCppClass : public QObject {
Q_OBJECT
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
public:
MyCppClass();
virtual ~MyCppClass();
Q_INVOKABLE void myInvokeFunc();
int value();
void setValue(int i);
signals:
void valueChanged(int);
private:
int m_iValue;
};
使用QML示例:
// FILE: MyQml.qml
import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Window 2.0
import MyCppPlugin 1.0
Item {
MyCppClass { //<==OK
id: myClass //<==OK
value: 42 //<==QML LOAD ERROR
}
Button {
text: "Hello"
onClicked: {
myClass.myInvokeFunc() //<==OK
}
}
发生了什么:
Q_INVOKABLE
函数这对我来说没有意义(Qt 5.1.1,Win7)。插件加载,C ++对象被实例化,Q_INVOKABLE
函数有效,但我显然无法“看到”任何Q_PROPERTY
属性。
问题: Q_INVOKABLE
在某个实例上工作的可能情况有哪些,但{em>相同Q_PROPERTY属性仍然不可用>实例?
答案 0 :(得分:0)
我也使用Win 7 Qt 5.1.1而且我对Q_PROPERTY没有问题。
你的函数实现可能有问题(比如改变信号的无限循环)? 或者你有多个你的插件版本并使用错误?
如果问题不是这样,您可以尝试在C ++中创建MyCppClass对象并使用meta-objets fonctions(特别是QObject :: dynamicPropertyNames或QMetaObject :: propertyCount / property)来探索它以获取属性列表
答案 1 :(得分:0)
最有可能的是,您没有在Qt元对象系统中正确注册您的课程。它通常由qmlRegisterType
或类似方法完成。