На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Перемещение карты мышью

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Перемещение карты мышью
 
Чтобы можно было нажать на карту и тащить мышью  реализовал в QtCreator + GISDesigner15 + компилятор MSVC2019 следующий код:
Код
map = new QDMapView(this);
ui->gisLayout->addWidget(map);
connect(map,&QDMapView::SignalMouseMove,this,&GISForm::onMapMouseMove);
connect(map,&QDMapView::SignalMousePress,this,&GISForm::onMapMousePress);
connect(map,&QDMapView::SignalMouseRelease,this,&GISForm::onMapMouseRelease);
connect(map,&QDMapView::SignalMouseDoubleClick,this,&GISForm::onMapMouseDoubleClick);

...

void GISForm::onMapMousePress(int x, int y, int modkeys)
{
    FX=x;
    FY=y;
    FCapture=true;
    map->setCursor(Qt::OpenHandCursor);
}

void GISForm::onMapMouseMove(int x, int y, int modkeys)
{
    int l,t;
    double mx,my;

    //отобразить координаты
    map->GetMapLeftTop(&l,&t);
    mx=l+x;
    my=l+y;
    mapPictureToPlane(map->GetMapHandle(),&mx,&my);
    ui->Status->setText(QString::asprintf("X=%.8f Y=%.8f",mx,my));

    //переместить карту
    if (FCapture){
        l += FX-x;
        t += FY-y;
        map->SetMapLeftTop(l,t);
        FX=x;
        FY=y;
    }
}

void GISForm::onMapMouseRelease(int x, int y, int modkeys)
{
    FCapture=false;
    map->setCursor(Qt::ArrowCursor);
}
И все бы ничего, карта перемещается мышью, но вот ее отображение, пока тащищь моргает то серым, то опять карта, отпустишь - нормально видно.
Аналогичный код в Delphi XE10 работает отлично, без морганий.
Моджет какую-нибудь буферизацию надо включить?
 
Здравствуйте!

При вызове SetMapLeftTop() происходит полная перерисовка окна, что является предположительной причиной указанного поведения.
В качестве решения можно воспользоваться отправкой сообщения MWP_SCROLLBY, например, следующим способом:
 

Код
void MainForm1::DMapView1_SignalMouseMove(int x, int y, int mod)
{
…
If (IsMapScrollingActive)
  {
    POINT scrolling;
    scrolling.x = LastMapScrollingPosition.x - x;
    scrolling.y = LastMapScrollingPosition.y - y;
    ui.DMapView1->DoMapWindowMsg(MWP_SCROLLBY, (LPARAM)&scrolling);
    LastMapScrollingPosition.x = x;
    LastMapScrollingPosition.y = y;
   }
}
Доработка метода SetMapLeftTop() включена в план реализации в одном из следующих выпусков ГИС Конструктор.
Изменено: Константин Ганюшин - 29.01.2025 18:14:02 (форматирование)
 
Добрый день!

Обновленная версия ГИС Конструктор с доработанным методом SetMapLeftTop() доступна для скачивания на нашем сайте.
Спасибо за ожидание!
Страницы: 1
Читают тему (гостей: 5)



© КБ Панорама, 1991-2026

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности