QGIS: конструктор по умолчанию для QgsVectorLayer и QgsRasterLayer?

#c #qgis

#c #qgis

Вопрос:

Я пытаюсь создать элемент управления Windows Forms, используя QGIS API и предварительно определенный файл проекта QGIS, чтобы я мог установить свойства X и Y в элементе управления Windows Forms, и QGIS API покажет предопределенные данные карты в элементе управления, сфокусированные на заданных координатах.

Использование QgsProject::instance()-> read(), похоже, вызывает необработанное исключение (местоположение чтения с нарушением доступа 0x00000000), поэтому я пытаюсь просмотреть фактический код построчно. Там есть часть qgsproject.cpp это касается извлечения слоев из файла проекта и последующего добавления их на холст карты, в котором говорится:

 QgsMapLayer *mapLayer = null;
if(type=="vector")
    mapLayer = new QgsVectorLayer;
else if(type==""raster")
    mapLayer = new QgsRasterLayer;
  

Где type — это значение атрибута элемента ‘type’.

Когда я пытаюсь скомпилировать это в своем проекте Visual Studio, он жалуется на отсутствие конструктора по умолчанию для любого типа слоя карты. Единственные доступные мне конструкторы требуют путей и базовых имен и, похоже, на самом деле не работают (следовательно, пытаются использовать те же методы, что и графический интерфейс, учитывая, что файл проекта загружается в полном графическом интерфейсе приложения).

Конструктор по умолчанию для QgsRasterLayer, похоже, даже не является частной функцией-членом. Кто-нибудь знает, как AI будет выполнять эту компиляцию?

Спасибо, Рик

Ответ №1:

Просто предположение: используете ли вы Visual Studio 2008? http://hub.qgis.org/wiki/quantum-gis/Building_QGIS_from_Source#Building-with-Microsoft-Visual-Studio указывает, что двоичные файлы QGIS (я предполагаю, что вы их используете) создаются с использованием Visual Studio 2008 — если вы используете другую версию компилятора, вы можете столкнуться с проблемами смешивания во время выполнения.