Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB
x
Dec. 19, 2018, 12:40 p.m.

Как в QML на объекте Map наиболее оптимизированно показать часть QGeoPath?

qt5, qt, трек, qml

Имеется объект класса QGeoPath , который хранит ~3500 точек. Заказчик требует, чтобы в программе была настройка, какую часть запомненного трека отрисовывать. Условно говоря, 150 точек, 300 точек, 500 точек, 1000, 2000, полный трек.

В самом классе QGeoPath нет возможности указать, на какой точке остановиться при отрисовке трека. Поэтому с таким классом видится только два пути:

  1. Делать копию объекта, укорачивать до нужной длинны, и этот объект и отрисовывать на карте Map .
  2. Или копировать только нужные данные из этого объекта в отображаемый и отрисовывать его на карте Map . (Возможно, это более оптимизированно, чем вариант 1, но не факт).

Небольшие подробности: экземпляр QGeoPath пополняется новыми точками 10 раз в секунду. Пока трек не достиг длинны 3500 точек, новые точки просто добавляются в «голову». Когда длинна становится 3500, работает алгоритм «змейки», то есть в голову добавляется точка, и в «хвосте» точка удаляется.

Класс QGeoPath - это, по сути,

QList<QGeoCoordinate>
. То есть, это не массив, а очень фрагментированная в памяти структура. Делать с нее копию таких данных 10 раз в сек, только для того, чтобы показать часть данных - это какой-то дикий оверхед.

Вопрос: как можно извратиться так, чтобы отображать часть трека наиболее оптимизированным способом?

1

Думаю, что в любом случае придётся держать оригинальный список точек.

QGeoPath имеет методы добавления, удаления и замены точек. думаю, что можно брать QGeoPath, который вы поместили в карту для отображения (напомните пожалуйста в каком объекте QGeoPath используется? я не занимаюсь той частью Qt в силу отсутствия необходимости), и просто удалять и добавлять необходимые точки. Но оригинальный набор точек наверняка придётся держать.

А вообще, мне кажется, что вы занимаетесь экономией на спичках в данном случае. Поскольку сама по себе карта в системе позиционирования отнимает гораздо больше ресурсов, да и графический интерфейс на QML будет в разы тяжелее, чем QList с 3500 точек.

Наверняка у вас есть места, которые имеют больше необходимости в оптимизации, например, какой-нибудь Stack Page, который приличную часть времени скрыт от глаз пользователя, но при этом всё время висит в памяти, вместо того, чтобы создаваться по запросу (клику по кнопке)

0

Comments

Only authorized users can post comments.
Please, Log in or Sign up
v
Jan. 17, 2019, 11:51 a.m.
vitalir12

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:20points,
  • Rating points-10
v
Jan. 17, 2019, 11:49 a.m.
vitalir12

C++ - Test 002. Constants

  • Result:50points,
  • Rating points-4
v
Jan. 17, 2019, 11:13 a.m.
vitalir12

C++ - Тест 003. Условия и циклы

  • Result:28points,
  • Rating points-10
Last comments
I
Jan. 16, 2019, 8:06 a.m.
IscanderChe

Заработало. Забыл model->select(); вписать.
I
Jan. 16, 2019, 8:02 a.m.
IscanderChe

Всё равно пусто, хотя строка с данными в базу добавляется.
Jan. 16, 2019, 7:51 a.m.
Евгений Легоцкой

потому, что нужно сохранять информацию для всех остальных ролей и столбцов через вызов переопределённого метода. Да к тому же вы ещё и зациклили вызов метода data. QVariant MySqlTableModel:...
I
Jan. 16, 2019, 7:43 a.m.
IscanderChe

Сделал вот так. В tableView ничего нет, кроме заголовка. QVariant MySqlTableModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { QTime ...
Now discuss on the forum
Jan. 17, 2019, 1:40 p.m.
Михаиллл

Спасибо, заработало.Учту с переменными.
Jan. 17, 2019, 12:01 p.m.
Алексей Внуков

у меня просто есть отдельное поле с чекбоксамими какие колонки нужно отображать CheckBox { id: checkBox text: qsTr("some text") checked: true onC...
Jan. 15, 2019, 4:53 p.m.
Михаиллл

Спасибо, заработало.Но выдало обычный текст без форатирования HTML.Придется искать дальше
Jan. 15, 2019, 12:52 p.m.
BlinCT

Я же вам выше написал CLion умеет работать с ремоут машинами. И Qt так же собирает.
Join us in social networks

For registered users on the site there is a minimum amount of advertising