Тема была в этом разделе была создана ошибочно и перенесена в другой раздел:
Пытаюсь реализовать перемещение карты на планшете с испльзованием тачскирина.
В работе используем формат mbtiles.
Для отображения карты создан класс наследник от компонента QDMapView и в нем реализованы обработчики событий от тачскрина (см. код ниже)
При работе с картой mbtiles, в которой размер тайла равен в среднем 10кБ карта перемещается плавно, без рывков и подтомаживаний.
Но при работе с картой, в которой размер тайла в среднем равен 150 кБ начинают появляться рывки и подтормаживания. Хотя при перемещении этой же карты в ГИС Панорама 14 все работает адекватно.Можно ли как-то ускорить работу карты в своем приложении?
Характеристики планшета:
Operating System: Astra Linux
KDE Plasma Version:
KDE Frameworks Version: 5.104.0
Qt Version: 5.15.2
Kernel Version: 5.15.0-70-generic
OS-Type: 64
Processor: 4 × Intel® Celeron® N5100 @ 1.10GHz
Memory: 3,6 ГиБ
P.S.: Размер фрагмента для уровня увеличения узнаем, открыв файл через DB Browser for SQLite
class MapGisView : public QDMapView
{
pivate:
QPointF scrollBy(QPointF start, QPointF finish);
bool event(QEvent* event);
}
bool MapGisView::event(QEvent *event)
{
if(event->type() == QEvent::TouchBegin)
{
QTouchEvent *touchEvent = static_cast<QTouchEvent*>(event);
m_ScrollBarStart = QPoint(HScrollBar->value(),VScrollBar->value());
m_FirstPointTouchDrag = touchEvent->touchPoints().first().pos();
m_TouchCounter = 0;
return true;
}
if(event->type() == QEvent::TouchUpdate)
{
m_TouchCounter++;
if(m_TouchCounter == 5)
{
QTouchEvent *touchEvent = static_cast<QTouchEvent*>(event);
QPointF second_point_touch_drag = touchEvent->touchPoints().first().pos();
if(!m_FirstPointTouchDrag.isNull())
{
QPointF mv = scrollBy(m_FirstPointTouchDrag, second_point_touch_drag);
}
m_TouchCounter = 0;
}
else
{
m_TouchCounter++;
}
}
if(event->type() == QEvent::TouchEnd)
{
connect(this,SIGNAL(SignalMousePress(int, int, int)),this,SLOT(do_SignalMousePress(int, int, int)));
}
return QWidget::event(event);
}
QPointF MapGisView::scrollBy(QPointF start, QPointF finish)
{
double dx = start.x() - finish.x();
double dy = start.y() - finish.y();
int x_move = m_ScrollBarStart.x() + static_cast<int>(dx);
int y_move = m_ScrollBarStart.y() + static_cast<int>(dy);
//Move map
HScrollBar->setValue(x_move);
VScrollBar->setValue(y_move);
return QPointF(x_move, y_move);
}
Пытаюсь реализовать перемещение карты на планшете с испльзованием тачскирина.
В работе используем формат mbtiles.
Для отображения карты создан класс наследник от компонента QDMapView и в нем реализованы обработчики событий от тачскрина (см. код ниже)
При работе с картой mbtiles, в которой размер тайла равен в среднем 10кБ карта перемещается плавно, без рывков и подтомаживаний.
Но при работе с картой, в которой размер тайла в среднем равен 150 кБ начинают появляться рывки и подтормаживания. Хотя при перемещении этой же карты в ГИС Панорама 14 все работает адекватно.Можно ли как-то ускорить работу карты в своем приложении?
Характеристики планшета:
Operating System: Astra Linux
KDE Plasma Version:
KDE Frameworks Version: 5.104.0
Qt Version: 5.15.2
Kernel Version: 5.15.0-70-generic
OS-Type: 64
Processor: 4 × Intel® Celeron® N5100 @ 1.10GHz
Memory: 3,6 ГиБ
P.S.: Размер фрагмента для уровня увеличения узнаем, открыв файл через DB Browser for SQLite
class MapGisView : public QDMapView
{
pivate:
QPointF scrollBy(QPointF start, QPointF finish);
bool event(QEvent* event);
}
bool MapGisView::event(QEvent *event)
{
if(event->type() == QEvent::TouchBegin)
{
QTouchEvent *touchEvent = static_cast<QTouchEvent*>(event);
m_ScrollBarStart = QPoint(HScrollBar->value(),VScrollBar->value());
m_FirstPointTouchDrag = touchEvent->touchPoints().first().pos();
m_TouchCounter = 0;
return true;
}
if(event->type() == QEvent::TouchUpdate)
{
m_TouchCounter++;
if(m_TouchCounter == 5)
{
QTouchEvent *touchEvent = static_cast<QTouchEvent*>(event);
QPointF second_point_touch_drag = touchEvent->touchPoints().first().pos();
if(!m_FirstPointTouchDrag.isNull())
{
QPointF mv = scrollBy(m_FirstPointTouchDrag, second_point_touch_drag);
}
m_TouchCounter = 0;
}
else
{
m_TouchCounter++;
}
}
if(event->type() == QEvent::TouchEnd)
{
connect(this,SIGNAL(SignalMousePress(int, int, int)),this,SLOT(do_SignalMousePress(int, int, int)));
}
return QWidget::event(event);
}
QPointF MapGisView::scrollBy(QPointF start, QPointF finish)
{
double dx = start.x() - finish.x();
double dy = start.y() - finish.y();
int x_move = m_ScrollBarStart.x() + static_cast<int>(dx);
int y_move = m_ScrollBarStart.y() + static_cast<int>(dy);
//Move map
HScrollBar->setValue(x_move);
VScrollBar->setValue(y_move);
return QPointF(x_move, y_move);
}
Изменено: - 19.11.2024 14:22:24