У меня есть ListModel, заполненный вот так:
Component.onCompleted:{
fillListModel();
}
ListModel{
id:listModel;
}
function fillListModel(){
for(var i=0; i<2; i++)
listModel.append({"aKey": "aKey"+i})
}
ComboBox{
...
model:listModel //each element of the model appears only one time
}
Я хотел бы сделать строку из этой модели, поэтому делаю:
function listModelToString(){
var datamodel = []
for (var i = 0; i < listModel.count; ++i){
datamodel.push(listModel.get(i))
}
var keysList = JSON.stringify(datamodel)
console.info(keysList)
}
Получаю такой результат:
[{"aKey":"aKey0","aKey":"aKey0"},{"aKey":"aKey1","aKey":"aKey1"}]
Почему он помещает каждую пару (aKey, aKey0), (aKey, aKey1) в двойные? Я могу ездить на "дополнительных" значениях, но мне интересно, почему я получаю это вместо того, чтобы просто:
[{"aKey":"aKey0"},{"aKey":"aKey1"}]
Спасибо.
Обновлено: Минимальный код:
import QtQuick 2.6
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.2
ApplicationWindow {
id: mainWindow
width: 400
height: 400
visible: true
Component.onCompleted:{
fillListModel();
}
ListModel{
id:listModel;
}
function fillListModel(){
for(var i=0; i<2; i++)
listModel.append({"aKey": "aKey"+i})
listModelToString()
}
function listModelToString(){
var datamodel = []
for (var i = 0; i < listModel.count; ++i)
datamodel.push(listModel.get(i))
var keysList = JSON.stringify(datamodel)
console.info(keysList) //output [{"aKey":"aKey0","aKey":"aKey0"},{"aKey":"aKey1","aKey":"aKey1"}]
}
ComboBox{
model:listModel //each element of the model appears only one time
}
}
Спасибо, но это действительно минимум, который я могу предоставить, все это в элементе, а listModel используется для ComboBox (я обновил свой пост). Но если у вас будет хороший результат, я проверю на своей стороне. А функция fillListModel вызывается только один раз.
если он предоставляет минимальный воспроизводимый пример, который я мог бы скопировать и выполнить напрямую, он минимальный, но не полный, но я все равно даю тот же ответ.
О'кей, я обновился. Я использую Qt 5.9.0.
Продолжаю получать правильный результат, тестирую с Qt 5.10.1 на Linux
Хорошо, такой же код, разные результаты, похоже, проблема Qt.

Получаю:
qml: [{"aKey":"aKey0"},{"aKey":"aKey1"}], мне кажется, вы дважды вызывали функцию fillListModel или что-то подобное, вы должны предоставить минимальный воспроизводимый пример