QML & Array of Objects to QML side
-
Hi
I have array of Objects in C++ side. E.g QList<Fruits>. Assume that number of fruits are 5. I would like to display the name of fruit using five text elements.
- I can expose these objects using Model. If Expose the fruit list as model, I have to use them View.
- If I expose through QVariantList, any updates to fruit list will not be updated updated internally. Issues with this approach is that need to send the full list again.
Is there way I can use the model, still update the data with model internally and use it without Views ?
Please note that I'm experimenting with different options. If you have any inputs please suggest.
-
@dheerendra said in QML & Array of Objects to QML side:
Is there way I can use the model, still update the data with model internally and use it without Views ?
I didn't understand, can you rephrase the question? What do you mean by "update the data with model internally"? What is using without Views?
-
@Eeli-K
Thank you responding to my question. I would like to have model in C++. Assume I have 5 elements in model and it has role called 'name'. I would like to display the name with simple 5 text elements instead of using ListView or GridView etc. Also I would like the text elements to updated whenever the model changes.Hope it clarifies.
-
@dheerendra I think you still need something which uses a model automatically or you have to catch the signals from C++ and update the visual elements manually. Strictly speaking a Repeater is not a View but it's updated automatically:
import QtQuick 2.7 import QtQuick.Controls 2.2 ApplicationWindow { visible: true width: 640 height: 480 ListModel { id: lm ListElement {} ListElement {} } Row { Repeater { model: lm Button { text: lm.count onClicked: lm.append({}) } } } }
-
Do you really need a model in C++ to do this. Here is how I create a row of tabs dynamically in QML:
TabView { id:wayPointTabView anchors.top:titleArea.bottom anchors.topMargin:5 anchors.left:parent.left anchors.right:parent.right clip:true height:325 tabPosition:Qt.BottomEdge Component.onCompleted:{ var i = controller.getNumOfMarkerTypes(); for (var j = 0; j< i; j++) { var tab = addTab(controller.getMarkerTypeString(j),waypointIconTabView) tab.active = true; console.log("\t\t>>>>>>Tab", tab.progress, tab.item) tab.item.markerType = j; // tab.loaded.connect(wayPointTabView.xxx) // tab.loaded.connect(function() { tab.item.markerType = j; }) tab.item.focus = true } currentIndex = 1; } } Now controller is a c++ class. It has the two methods defined as: (Controller.h)
Q_INVOKABLE int getNumOfMarkerTypes();
Q_INVOKABLE QString getMarkerTypeString(int);