[SOLVED] receiving list from c++ to qml listview
-
Hi, I am trying to do almost same thing as mentioned here but I don't understand what modelData means here:
@ListView {
model: stringListPassedFromCpp
delegate: Text {
text: modelData
}
}@How and where should I declare this modelData ? Thanks in advance. :)
I could ask something more and accurate about this too:
I have now QStringList for testing purposes which has 3 strings and I would like to get this QStringList to qml. I would like to use TextSwitch as delegate. This is what I have at the moment:
@SilicaListView {
anchors.fill: parent model: model_.excerciseNames() delegate: TextSwitch { text: onClicked: {} } }
}@
The function excerciseNames() is defined as
@Q_INVOKABLE QStringList excerciseNames();@
I think I am yet very far from the solution so any help would be great :D
-
joone
Read about modelData in this link "QStringList to QML":https://qt-project.org/doc/qt-5.0/qtquick/qtquick-modelviewsdata-cppmodels.html#qstringlist-based-modelSo all the QString within the QStringList will can be accessed as modelData
So you can access the QString data in the TextSwitch delegate as
@SilicaListView {
anchors.fill: parent
model: model_.excerciseNames()delegate: TextSwitch {
text: modelData
onClicked: {}
}
}@ -
The examples in that page you pointed me are invisible for me, can someone see whats in there? I tried to solve this from the Qt-Creator examples also but didn't get it to work yet. When I use the Q_INVOKABLE method with QStringList I get one of the Strings from the list but when I try to do as the example refered and use this :
@context>setContextProperty("excerciseNamesModel",QVariant::fromValue(model->excerciseNames()));
SilicaListView {
anchors.fill: parent
model: excerciseNamesModeldelegate: TextSwitch {
text: modelData
onClicked: {}
}
}
@then I don't get anything. The registered excerciseNamesModel is coloured in the editor so it apparently recognizes the model but it is not working for some reason.
-
@Q_INVOKABLE@
means the the method can be called from the QML side. So you have to set your cpp model object as
@
ExcerciseNamesModel namesModel;
auto context = viewer.rootContext();
context->setContextProperty("excerciseNamesModel", namesModel)@and then set the model in QML file as
@
SilicaListView {
anchors.fill: parent
model: excerciseNamesModel.excerciseNames()delegate: TextSwitch {
text: modelData
onClicked: {}
}
}@Note: This code is just like pseudocode and I didn't compile it or test it.
-
You can read more about Exposing CPP models to QML in this link "Link":http://qt-project.org/doc/qt-4.8/qdeclarativemodels.html#qstringlist-based-model
-
Would you happen to know a solution for my other problem also ? After updating this Sailfish SDK to a newer version, I lost qDebug() prints and I haven't found where they would come back. I can't see them at the application output view anymore and this makes it a lot harder to track down the behaviour of my program. :D
-