我遇到以下問題。如何將用於計算的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