Здравствуйте. ГИС Конструктор для Qt Designer x64 (версия 13.1.0, Qt4, Qt5, ОС Astra Linux SE, релиз Смоленск)
Необходимо отобразить объекты HOBJ info на QPixmap* cshPxm с помощью функции mapPaintMapObject95 (cshPxm затем отображается на Q3ScrollView->viewport()).
При отображении объектов на cshPxm возникают проблемы: непонятно, что вносить в xCont.xcDisplay и xCont.xcWindow (XCONTEXT xCont).
Для рисования объекта на виджете можно использовать следующий алгоритм действий: - выполнить отображение изображения объекта в память с помощью функции mapPaintMapObjectToDib (mapapi.h):
Код
// Вывести изображение объекта в DIB
// hmap - идентификатор открытых данных
// lpDibBits - адрес первого байта буфера изображения (32 бита)
// width - ширина изображения (кратно 32),
// height - высота изображения,
// rect - координаты фрагмента карты (Draw)
// в изображении (Picture).
// image - описание вида объекта (см. MAPGDI.H), если объект
// должен рисоваться своим условным знаком - значение параметра
// можно установить в ноль,
// info - идентификатор объекта карты в памяти
// erase - признак предварительной очистки фона изображения
// (0 - фон не стирать, 1 - очистить фрагмент цветом фона)
// При ошибке в параметрах возвращает ноль
_MAPIMP long int _MAPAPI mapPaintMapObjectToDib(HMAP hmap, char *lpImage, int width, int heigth, RECT *rect,
PAINTPARM *image, HOBJ object);
_MAPIMP long int _MAPAPI mapPaintMapObjectToDibEx(HMAP hmap, char *lpImage, int width, int heigth, RECT *rect,
PAINTPARM *image, HOBJ object, int erase);
- перенести изображение из памяти на виджет с помощью QPainter.
Пример кода:
Код
// Отобразить объект в память
QImage tempImage(this->width(), this->height(), QImage::Format_RGB32);
tempImage.fill(backgroundColor);
mapPaintMapObjectToDib(HMap, (char*)tempImage.bits(), tempImage.width(), tempImage.height(), &rect, 0, HObj);
// Отрисовать на виджет
painter->drawImage(0, 0, tempImage);