【发布时间】:2013-09-13 18:22:32
【问题描述】:
我编写了一个 C++ 插件,它为 QML 公开了一个 C++ MyCppClass。 Q_INVOKABLE 函数有效,但我无法“看到”same 实例的任何 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
}
}
发生了什么:
- 成功:通过 QML“导入”加载 C++ 插件
- 成功:在 QML 中实例化 C++ 对象
-
成功:从 QML 调用
Q_INVOKABLE函数 - FAIL:从相同 C++ 对象访问 QML 中的任何属性(QML 加载失败,错误:“无法分配给不存在的属性“值” em>") .... 分配/绑定无法加载 QML 文件,并且“读取”任何属性都会导致“未定义”)
这对我来说没有意义(Qt 5.1.1,Win7)。插件加载,C++ 对象被实例化,Q_INVOKABLE 函数工作,但我显然无法“看到”任何Q_PROPERTY 属性。
问题:Q_INVOKABLE 在一个实例上工作但Q_PROPERTY 属性对于该相同 实例仍然不可用的可能情况有哪些?
【问题讨论】: