Продолжение этого вопроса. Никак не могу задать в path MapPolyLine динамически формирующиеся данные.
Модель:
QVariant TracksModel::data(const QModelIndex & index, int role) const {
//Если пришел запрос на массив, то досрочно его отдаем
if (role == PointsRole)
{
return tracks[index.row()];
}
/*...*/
}
// Метод для получения имен ролей через хешированную таблицу.
QHash<int, QByteArray> TracksModel::roleNames() const {
/* То есть сохраняем в хеш-таблицу названия ролей
* по их номеру
* */
QHash<int, QByteArray> roles;
roles[IdRole] = "id";
roles[NameRole] = "name";
roles[PointsRole] = "points";
return roles;
}
// Метод обновления таблицы в модели представления данных
void TracksModel::updateModel()
{
// Обновление производится SQL-запросом к базе данных
this->tracks = this->getPointsOfTracks(); // и здесь обновляется список с точками каждого трека
QString str_query("SELECT id, name FROM Tracks;");
this->setQuery(str_query);
qDebug() << str_query << endl;
qDebug() << this->tracks[0][0] << endl;
}
QVector<QVariantList> TracksModel::getPointsOfTracks()
{
QVector<QVariantList> temp_tracks;
for (int i = 0; i <= 3; i++) // обрабатываем каждый трек
{
QVariantList path;
// for(int j = 0; j <= 10; j++) // ззаполняем массив с точками одного трека
// {
// для примера хардкорно задаем две точки для каждого отображаемого трека
QVariantMap point;
point["latitude"] = QVariant(55.928848 + (0.000680 * i));
point["longtitude"] = QVariant(37.519537 + (0.002200 * i));
path.append(point);
QVariantMap point2;
point2["latitude"] = QVariant(55.928169 + (0.000680 * i));
point2["longtitude"] = QVariant(37.521683 + (0.002200 * i));
path.append(point2);
//}
temp_tracks.push_back(path);
// Сохраняем трек в список
}
return temp_tracks;
}
Попробовал разместить на карту точку(с помощью этой модели) и посмотреть что же выведется при клике:
MapItemView {
id: tracksLine
model: tracksModel
delegate: MapQuickItem {
coordinate {
latitude: 55.92862
longitude: 37.520932
}
sourceItem: Image {
source: "qrc:///img/pikachu.png"
}
MouseArea{
anchors.fill: parent;
onClicked: {
if( mouse.button == Qt.LeftButton){
var s = [
{ latitude: 50, longitude: 50},
{ latitude: 50, longitude: 50},
{ latitude: 50, longitude: 50},
{ latitude: 50, longitude: 50}
]
console.log(s);
console.log(points);
}
}
}
}
}
Я получаю
qml: [[object Object],[object Object],[object Object],[object Object]] qml: [[object Object],[object Object]]
Т.е. одно и тоже, но при установке path
MapItemView{
id: tracksLines
model: tracksModel
delegate:
MapPolyline {
line.width: 3
line.color: 'red'
path: points
}
}
получаю "QML MapPolyline: Unsupported path type". Как мне наконец скормить данные MapPolyLine?
Если кому интересно разобраться https://github.com/yashart/neva_project/tree/NewModel Все происходит в map/MapComponent.qml. Модель которая за все отвечает расположена в database/tracksmodel.*
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть html, сконвертированный из MS Word и там используется шрифт SymbolПочему-то этот шрифт не работает в Vivaldi