Страница 1 из 1

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

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

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

Добавлено: 20 фев 2011, 14:45
Voltron
Эти примеры смотрели? Чтобы не быть голословным прикрепляю один из примеров, собранный в QtCreator.
2_basic_main_window.tar.bz2
Compiled with QtCreator
(101.25 КБ) 653 скачивания
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();
}

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

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

Добавлено: 21 фев 2011, 09:39
GIS-dev
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 по этим путям я ранее закинул, что впрочем никак не повлияло на результат...

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

Добавлено: 22 фев 2011, 19:37
GIS-dev
Пересборка 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. :(

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

Добавлено: 22 фев 2011, 20:26
Voltron
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.

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

Добавлено: 03 мар 2011, 19:13
GIS-dev
Проблема решена! Спасибо за проект!
Во-первых, 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%