我遇到以下问题。如何将用于计算的C++结构体暴露给Qml
我正在C++中开发一个模型,并在Qml中查看,通过控制器连接它们。在我的模型中,我执行多个计算。我还为我的应用程序的用户提供了用qml编写自定义事件处理程序的可能性。 现在我遇到了一个问题,我决定使用定点符号,并且我写了一个相应的C++类。现在我要向开发人员提供FixedPoint类(包括所有的运算符),他们决定用Qml扩展我的应用程序。到目前为止,我提供了所有数据作为QProperties,这是编码准则要求的。但我愿意为其他解决方案在我的团队中进行讨论。显然,一个固定点是没有身份的,算法依赖于复制它的可能性,当从QObject继承时它是不允许的。
所以问题来了:我怎样才能暴露一个c + +类/结构到QML,这不是一个身份?
在代码的示例:
struct FixedPoint
{
FixedPoint(FixedPoint&);
FixedPoint& operator=(FixedPoint&);
...
int mantissa;
int exponent;
}
我想用它在设为Qml作为属性(值)用C++编写一个QQuickItem的:
MyQmlObject{
value{ mantissa: 134; exponent: 3 }
}
属性值然后在JavaScript的整个计算过程中使用,并复制了很多次。因此,我认为无法将价值视为FixedPoint *类型的财产。我对吗?
您是否尝试过使用'Q_DECLARE_METATYPE' +'qmlRegisterMetatype'?请注意,在这种情况下,您只能通过信号/插槽传递值。因为,要直接将某些内容传递给QML,必须将它作为'QObject'。运营商不会在QML内工作,因为您无法扩展QML语言:) – 2014-10-16 14:39:59
如果您只需要传递实例(例如,您不需要在JavaScript表达式中使用它),则可以将实例包装为QVariant。 – sergk 2014-10-17 03:47:06
另一方面,如果您需要在qml中实际使用它,则应该从QObject派生或使用QMap来代替。 –
sergk
2014-10-17 03:50:24