Форум программистов, компьютерный форум, киберфорум
QML
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 7
1

Взаимодействие QList (C++) и path QML

20.11.2020, 22:35. Просмотров 2937. Ответов 3
Метки нет (Все метки)

Доброго времени суток.
Прошу помощи потому что уже накипело(как обычно у всех и бывает)

Проблема заключается в том, что у меня имеется модель C++:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class MarkerModelTrack : public QAbstractListModel
{
    Q_OBJECT
 
public:
    using QAbstractListModel::QAbstractListModel;
    enum MarkerRoles{positionRole = Qt::UserRole + 1,
                    pathRole};
 
    Q_INVOKABLE void addTrack(QVariantList list){
        beginInsertRows(QModelIndex(), rowCount(), rowCount());
        buffer = list;
        endInsertRows();
    }
 
 
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override{
        if (index.row() < 0 || index.row() >= buffer.count())
            return QVariant();
        if(role== MarkerModelTrack::pathRole)
        {
            qDebug() << "buffer: " << buffer;
            return buffer;
        }
        return QVariant();
    }
 
    QHash<int, QByteArray> roleNames() const override{
        QHash<int, QByteArray> roles;
        roles[positionRole] = "position";
        roles[pathRole] = "pathValues";
 
        return roles;
    }
 
 
private:
    QList<QGeoCoordinate> buffer;
};
Но я не могу понять как мне заполнить переменную path обьекта MapPolyLine из С++, я понимаю что это нужно сделать в методе data чтобы вернулся list<coordinate>, но list это чисто js-ая тема, а QList<QGeoCoordinate> ему не нравится.

Вот тот кому должно все понравится: QML
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MapItemView
        {
            model: markermodeltrack
            delegate: Component
            {
                id: _mapComponentTrack
                MapQuickItem {
                    id: _itemTrack
 
                    sourceItem: MapPolyline
                    {
                        id: _track
                        line.width: 2
                        line.color: "red"
                        visible: true
                        path: pathValues
                    }
 
                }
            }
        }
Какие варианты передачи в переменную path возможны? я уверен что вариант только через метод data, потому что не знаю как еще обратиться именно к тому обьекту, ведь их может быть несколько. Мое первое обращение к знатокам, надеюсь не очень плохо изложил.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2020, 22:35
Ответы с готовыми решениями:

Вызов хранимой процедуры в Oracle с параметрами QList<double>, QList<QDateTime>, QList<quint64>
Добрый день, уважаемые форумчане. Необходимо в хранимую процедуру в Oracle передать параметры,...

QList<QList<QRgb>> ошибка с вложенными списками
Пишу класс, который будет производить операции над изображением (пока только обрезка пустых полей)....

список списков QList<QList<int>>
QList&lt;QList&lt;int&gt;&gt; results = FactorsComb(n); QList&lt;QList&lt;int&gt;&gt;::iterator Iter1; ...

Сокращение пути к файлу, x:\path\path\...\path
Помогите с решением такой задачи, желательно до четверга)): Строка длиной не более 1000 символов...

3
Модератор
Эксперт .NET
5303 / 4098 / 1182
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
20.11.2020, 23:30 2
Лучший ответ Сообщение было отмечено VjikUndead как решение

Решение

VjikUndead, не знаю поможет вам мой подход, но я как-то работал со списками собственных типов, возвращаемых из кода С++. Делать свою полноценную модель мне было утомительно (признаюсь, на мой взгляд тема модель/представление одна из самых замороченных в Qt), поэтому я сделал проще. По вызову метода C++ из кода на Qml я просто возвращал список (QList) собственных типов, а уже в коде QML через JS преобразовывал его в ListModel, заполненный ListElement и устанавливал как модель. Не спорю, это подход, так сказать, "в лоб", однако работает)))
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 7
20.11.2020, 23:33  [ТС] 3
Спасибо за отзывчивость, но такой способ не подходит в комплексе программы.
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 7
21.11.2020, 22:16  [ТС] 4
На будущее если кто-то столкнется с взаимодействием с qml и c++. Return QVariant::formValue(любой тип данных).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2020, 22:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

ASSERT failure in QList<T>::operator[]: "index out of range", file C:\Qt\5.7\mingw53_32\include/QtCore/qlist.h, line 545
Добрый день. В программе где-то есть утечка памяти, но что-то никак не могу её найти и исправить....

Подсветка QML элементов QML-ного плагина в QtCreator в случае нахождения QML файлов плагина в ресурсах!
Здравствуйте! Если сделать плагин для QML и подключить его в основном проекте ну как - то так:...

The path you have specified (D:\Program Files) is invalid. The Oracle Home path may not contain spaces.
Возникла проблема с установкой Oracle9i Database 9.0.1.1.1 ОС: Windows XP Professional SP3 ...

QList<QList<Type> >
Можно ли делать так? #include &lt;QCoreApplication&gt; #include &lt;QDebug&gt; class test { public: ...

[WPF] "Path" является неоднозначной ссылкой между "System.Windows.Shapes.Path" и "System.IO.Path"
Здравствуйте! Делаю экспорт из программы в Excel. Код брался от WinForm, немного переписал....

'QList<QListWidgetItem*>' в 'QList<QPair<QString, QString> >*'
Перевести 'QList&lt;QListWidgetItem*&gt;' в 'QList&lt;QPair&lt;QString, QString&gt; &gt;*' ?????


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.