我有以下问题。
我正在 C++ 中开发一个模型,在 Qml 中开发一个视图,通过控制器连接它们。在我的模型中,我执行了多项计算。我还为我的应用程序的用户提供了编写用 qml 编写的自定义事件处理程序的可能性。
现在我遇到了一个问题,我决定使用定点表示法,并且我已经编写了相应的 C++ 类。现在,我想向决定在 Qml 中扩展我的应用程序的开发人员提供 FixPoint 类(包括其所有运算符)。到目前为止,我将所有数据作为 QProperties 提供,这是编码指南所要求的。但我愿意在我的团队中讨论其他解决方案。
显然,固定点是没有身份的,算法依赖于复制它的可能性,这在继承 QObject 时是不允许的。
所以问题来了:如何将 C++ 类/结构公开给 QML,这不是一个身份?
代码中的示例:
struct FixedPoint
{
FixedPoint(FixedPoint&);
FixedPoint& operator=(FixedPoint&);
...
int mantissa;
int exponent;
}
我想在 Qml 中使用它作为用 C++ 编写的 QQuickItem 的属性(值):
MyQmlObject{
value{ mantissa: 134; exponent: 3 }
}
该物业value然后在 JavaScript 的整个计算过程中使用,并一路复制多次。所以我认为我不能将 value 设置为 FixedPoint* 类型的属性。我对吗?
感谢您的帮助。
无论如何,我们决定使用 QObject,但是以包装方式。也就是说,我们只是构建了一个FixPointWrapper(继承QObject),它保存了一个实际的FixedPointValue。然后就可以用于计算了。
听起来很复杂,但效果很好。对我们来说特别重要的是复制和分配定点值的可能性。因此,需要包装纸。
//QML
MyQmlObject{
value {mantissa: 2; exponent: 4}
}
//C++
class MyQmlObject : public QQuickItem
{
Q_Property( FixedPointWrapper* value ... )
}
class FixedPointWrapper : public QObject
{
...
public slots:
void setValue(FixedPoint){ //Forward to FixedPoint and implement your wanted effect. The same for getter}
private:
FixedPoint value;
}
一开始,这感觉像是一个肮脏的黑客行为,但在我们多想了一些之后,我们可以接受这个结果。
再次感谢您的帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)