在C++模型中,我有QAbstractListModel
派生類叫做Cart
,它包含QList<void*>
容器。從QML創建C++對象
在QML中,我顯示了一個對象列表。當用戶點擊其中任何一個時,它應該用C++創建該對象並將其添加到cart
。它還會設置該對象的一些屬性。
我的問題是我該如何真正以最好的方式做到這一點?
下面是代碼如何將看起來像在C++獨自:
Cart * cart = new Cart; // we have this object already created
// which we have exposed to QML as 'qmlcart'.
// When user clicks apple
Apple * apple = new Apple(1.99) ; // 1.99 is price
apple->setType("Red Delicious");
cart.add(apple );
// When user clicks orange
Orange * orange = new Orange(0.99) // price
orange->setType("Valencia")
cart.add(orange);
以上是直截了當在C++的世界,但如果點擊是在QML它變得有些複雜。創建和傳遞關於對象的信息的最佳方式是什麼?假設除了價格和類型之外,我們還有更多關於對象的屬性。
是否必須爲我們創建的每種類型的對象都有相應的插槽功能?如果對象具有更復雜的屬性,比如5個不同的屬性,我們是否將所有5個屬性都傳遞給槽功能或者有更好的方法?我們是否應該使用一些工廠設計模式來創建對象?
我在使用QML時缺少的一種特殊功能是使用C++創建的對象的自由。例如,如果它全是C++,那麼我可以創建C++對象並設置它的所有屬性,而不管它有多少個,並且只需將該對象添加到容器。
但是使用QML,儘管我擁有關於對象的所有信息,但是我無法真正創建和配置類,並且無法傳遞給C++,因爲它必須使用C++創建,無法返回,因此所有配置參數也必須傳遞給插槽功能!有沒有更好的方法?
您是否閱讀過官方Qt文檔? [鏈接](http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html) – folibis