hesaplamaları için C++ yapıları nasıl ortaya çıkar Şu sorunla karşılaşıyorum.Q ++
C++'da bir model geliştiriyorum ve Qml'de bir Görünüm geliştirip bunları Controllers üzerinden bağlarım. Benim modelimde çoklu hesaplamalar yapıyorum. Ayrıca, uygulamamın kullanıcılarına, qml'de yazılmış özel etkinlik işleyicileri yazma olanağı da sunuyoruz. Şimdi Sabit nokta gösterimi kullanmaya karar verdiğim ve karşılık gelen bir C++ sınıfı yazdığım bir noktaya rastladım. Şimdi, tüm operatörleri de dahil olmak üzere, FixedPoint sınıfını, uygulamanızı Qml'de genişletmeye karar veren geliştiricilere sunmak istiyorum. Şimdiye kadar, tüm verileri kodlama yönergelerinin gerektirdiği QProperties olarak sundum. Ancak, ekibimde bunları tartışmak için diğer çözümlere açığım. Açıkçası, sabit bir nokta kimlik değildir ve algoritmalar kopyalama olasılığına dayanır; bu, QObject öğesinden devralma sırasında izin verilmez.
Soru şu: Bir C++ sınıfı/yapısını QML'ye nasıl açıklayabilirim, bu bir kimlik DEĞİLDİR?
kod örneği:
struct FixedPoint
{
FixedPoint(FixedPoint&);
FixedPoint& operator=(FixedPoint&);
...
int mantissa;
int exponent;
}
C++ ile yazılmış bir QQuickItem bir özelliği (değer) olarak QML kullanmak isteyen
:
MyQmlObject{
value{ mantissa: 134; exponent: 3 }
}
özelliği değeri daha sonra javascript hesaplamaları boyunca kullanılan ve uzun bir şekilde birkaç kez kopyalanır. Bu yüzden FixedPoint * tipi bir özellik değeri yapamıyorum. Ben haklı mıyım
Q_DECLARE_METATYPE' + 'qmlRegisterMetatype' kullanmayı denediniz mi? Bu durumda değerleri sadece sinyaller/yuvalar yoluyla geçirebileceğinizi unutmayın. Çünkü, bir şeyi QML'ye doğrudan aktarmak için, bir "QObject" olmalıdır. Operatörler QML içinde çalışmayacaktır çünkü QML dilini genişletemezsiniz :) –
Örneğinizi iletmeniz gerekiyorsa (örneğin, javascript ifadelerinde kullanmanız gerekmez), örneğinizi QVariant olarak kullanabilirsiniz. – sergk
Diğer taraftan, onu qml'de kullanmanız gerekiyorsa, QObject'ten türetmeniz veya QMap 'yi kullanmanız gerekir. –
sergk