Итак, задачи перекинуть какой либо список из C++ в QML у меня возникают достаточно часто и первый раз решая её я потратил на это дело 2 дня! Жуть же? Ну я нуб так что мне можно...
Итак задача: Необходим список треков в плейлисте. Тоесть список их ID в базе данных. QList к сожалению QML не понимает от слова совсем и нам пригодится такая стращная штука как QAbstractListMode вещица достаточно интересная и масивная, но мы пробежимся по верхушкам...
Итак поехали: результат работы можно сразу посмотреть по ссылкам:
https://github.com/neochapay/radon/blob/master/src/model/playlistmodel.cpp https://github.com/neochapay/radon/blob/master/src/model/playlistmodel.h Мой мозг проел PHP и по этому мне удобнее работать с ассативными массивами, но QList не принимает несколько параметров - выход: делаем структуру:
Код CPP-QT:struct playListItem
{int trackId
; QString trackType
; bool playEd
;};
Пункт следующий: Говорим модели какие поля у нас будут, именно их мы и получим при экспорте в QML
Код CPP-QT:
PlayListModel
::PlayListModel(QObject *parent
) : {
}
Только бы не забыть объявить в хедаре хеш:
и функцию вывода всех полей:
Код CPP-QT:QHash roleNames
() const {return hash
;}
Теперь самая страшная функция, которая по сути то своей и выдаёт все данные!
Код CPP-QT:{
if (!index.isValid())
if (index.row() >= playList.size())
playListItem item = playList.at(index.row());
{
return item.trackId;
}
else if(role
== Qt::UserRole+1) {
return item.trackType;
}
else if(role
== Qt::UserRole+2) {
return item.playEd;
}
}
Суть её достаточно проста QML при delegate сообщает свой index - тоесть номер по порядку - мы выбираем объект и в зависимости от роли выдаём нужные данные. Для меня этот участок был самым сложным, ну а думаю с добавлением и удалением объектов модели у вас всё получится - если нет - смотрите код :)
Ну и где доказательства про 18 запусков у маска в 2018 году? Или ты предпочтешь и тут...