Работающий пример приложения QGIS на С++

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Работающий пример приложения QGIS на С++

Сообщение GIS-dev » 20 фев 2011, 09:56

Если кому-нибудь удалось откомпилировать работающий пример простейшего приложения под Windows, наподобии этого, используя QtCreator, плз поделитесь проектом! Никак не получается даже инициализировать приложение, класс QgsApplication, используемый для инициализации приложения вызывает ошибку QApplication::exec: Please instantiate the QApplication object first. Получается что при использовании QgsApplication вместо стандартного QT'шного QApplication приложение не может инициализироваться! :cry:

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Работающий пример приложения QGIS на С++

Сообщение Voltron » 20 фев 2011, 14:45

Эти примеры смотрели? Чтобы не быть голословным прикрепляю один из примеров, собранный в QtCreator.
2_basic_main_window.tar.bz2
Compiled with QtCreator
(101.25 КБ) 651 скачивание
GIS-dev писал(а):Получается что при использовании QgsApplication вместо стандартного QT'шного QApplication приложение не может инициализироваться!
Не верю ⓒ. QgsApplication прямой наследник QApplication. У вас точно все необходимые библиотеки и файлы находятся? Вот фрагмент кода из рабочего приложения

Код: Выделить всё


int main(int argc, char ** argv)
{
QgsApplication app(argc, argv, TRUE);
MainWindow * mypMainWindow = new MainWindow();
mypMainWindow->show();
return app.exec();
}

Все прекрасно инициализируется и запускается

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Re: Работающий пример приложения QGIS на С++

Сообщение GIS-dev » 21 фев 2011, 09:39

Voltron писал(а):Эти примеры смотрели? Чтобы не быть голословным прикрепляю один из примеров, собранный в QtCreator.
2_basic_main_window.tar.bz2
GIS-dev писал(а):Получается что при использовании QgsApplication вместо стандартного QT'шного QApplication приложение не может инициализироваться!
Не верю ⓒ. QgsApplication прямой наследник QApplication. У вас точно все необходимые библиотеки и файлы находятся? Вот фрагмент кода из рабочего приложения

Код: Выделить всё


int main(int argc, char ** argv)
{
QgsApplication app(argc, argv, TRUE);
MainWindow * mypMainWindow = new MainWindow();
mypMainWindow->show();
return app.exec();
}

Все прекрасно инициализируется и запускается
Спасибо за код и ссылки, эти примеры похоже единственные, я их неоднократно находил в разных местах, правда в виде готовых файлов они мне не встречались, да еще в составе проектов. К сожалению, они мне не помогли продвинуться. Собрал шестой пример, функция main один в один с вышеприведенной Вами... При запуске последовательно выскакивают, если жать "Пропустить":
Изображение
Изображение
Изображение
Впечатление, что конструктор QgsApplication не выполняет инициализацию QApplication. Что ему нужно - непонятно. На сайте QGIS в документации описания классов, методов и полей отсутствуют, разобраться наверное можно только анализируя исходный код библиотек.
Похоже, у меня какая-то фундаментальная проблема. Или чего-то не хватает, или нужна какая-то переменная окружения, или какая-то библиотека неправильная. Или DLL от QGIS не переваривают то, что у меня библиотеки Qt собраны статически. Но что может быть ещё не в порядке, не представляю. Запускаю программу из консоли OSGeo4W. Все инклуды, библиотеки и DDLки для сборки тоже оттуда(OSGeo4W\apps\qgis-dev). Qgis, входящий в комплект OSGeo4W (QGIS 1.7.0-Trunk) запускается нормально из этой папки.

PS. Что странно, инициализация QgsApplication по-видимому хотя бы частично происходит, например метод app.showSettings() если записать его результат в файл, выдает вот что:
Application state:
Prefix : K:/QtProj/QGis_Tutorial/tut_2-build-desktop/debug
Plugin Path : K:/QtProj/QGis_Tutorial/tut_2-build-desktop/debug/plugins
Package Data Path : K:/QtProj/QGis_Tutorial/tut_2-build-desktop/debug/.
Active Theme Name :
Active Theme Path : :/images/themes//
Default Theme Path : :/images/themes/default/
SVG Search Paths : K:/QtProj/QGis_Tutorial/tut_2-build-desktop/debug/./svg/
K:/QtProj/QGis_Tutorial/tut_2-build-desktop/debug/./svg/
C:/Documents and Settings/NONE/.qgis/svg/
User DB Path : K:/QtProj/QGis_Tutorial/tut_2-build-desktop/debug/./resources/qgis.db


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

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Работающий пример приложения QGIS на С++

Сообщение GIS-dev » 22 фев 2011, 19:37

Пересборка Qt в варианте c "shared" библиотеками также не оправдала надежд. По-прежнему QgsApplication не переваривается приложением. Какие библиотеки/инклуды лучше использовать, из "\OSGeo4W\apps\qgis-dev", "\OSGeo4W\apps\qgis" или из папки установленного QGIS "\Quantum GIS Tethys\apps\qgis" ?
А может кто-нибудь даст qgis_core.lib+qgis_gui.lib и соответствующие им ddl'ки? Из заведомо работающего проекта под Windows. :(

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Работающий пример приложения QGIS на С++

Сообщение Voltron » 22 фев 2011, 20:26

GIS-dev писал(а):Какие библиотеки/инклуды лучше использовать, из "\OSGeo4W\apps\qgis-dev", "\OSGeo4W\apps\qgis" или из папки установленного QGIS "\Quantum GIS Tethys\apps\qgis" ?
Tethys это версия 1.5, и уже давно устарела. Я бы рекомендовал пользоваться qgis-dev из OSGeo4W, т.к. это самая актуальная версия.
GIS-dev писал(а):А может кто-нибудь даст qgis_core.lib+qgis_gui.lib и соответствующие им ddl'ки? Из заведомо работающего проекта под Windows. :(
Пожалуйста (~3 Mb). В архиве проект под Windows со всеми либами. Cобирал в VSE, все зависимости из OSGeo4W

Да, я тут посмотрел в хрустальный шар... Возможно, проблема в том, что у вас библиотеки и проект собраны в разных конфигурациях. Например, библиотеки релизные, а проект отладочный. Для справки, QGIS в OSGeo собран как RelWithDebInfo.

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Re: Работающий пример приложения QGIS на С++

Сообщение GIS-dev » 03 мар 2011, 19:13

Проблема решена! Спасибо за проект!
Во-первых, Qt должны быть собраны под динамическую(shared) загрузку библиотек (хотя если пересобрать QGIS статически, возможно и библиотеки Qt тоже будут допустимы в статической версии).
Во-вторых, для корректной работы приложения необходимо в переменной PATH под shell'ом OSGeo4W принудительно ставить путь к библиотекам Qt (D:\Qt\4.7.1\bin) на первое место, или во всяком случае перед папкой "bin" самого OSGeo4W, библиотеки Qt которого несовместимы по версиям со средой разработки - set PATH=D:\Qt\4.7.1\bin;%PATH%

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость