
Работающий пример приложения QGIS на С++
-
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
Работающий пример приложения QGIS на С++
Если кому-нибудь удалось откомпилировать работающий пример простейшего приложения под Windows, наподобии этого, используя QtCreator, плз поделитесь проектом! Никак не получается даже инициализировать приложение, класс QgsApplication, используемый для инициализации приложения вызывает ошибку QApplication::exec: Please instantiate the QApplication object first. Получается что при использовании QgsApplication вместо стандартного QT'шного QApplication приложение не может инициализироваться! 

-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: Работающий пример приложения QGIS на С++
Эти примеры смотрели? Чтобы не быть голословным прикрепляю один из примеров, собранный в QtCreator.
Все прекрасно инициализируется и запускается
Не верю ⓒ. QgsApplication прямой наследник QApplication. У вас точно все необходимые библиотеки и файлы находятся? Вот фрагмент кода из рабочего приложенияGIS-dev писал(а):Получается что при использовании QgsApplication вместо стандартного QT'шного QApplication приложение не может инициализироваться!
Код: Выделить всё
int main(int argc, char ** argv)
{
QgsApplication app(argc, argv, TRUE);
MainWindow * mypMainWindow = new MainWindow();
mypMainWindow->show();
return app.exec();
}
Все прекрасно инициализируется и запускается
-
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
Re: Работающий пример приложения QGIS на С++
Спасибо за код и ссылки, эти примеры похоже единственные, я их неоднократно находил в разных местах, правда в виде готовых файлов они мне не встречались, да еще в составе проектов. К сожалению, они мне не помогли продвинуться. Собрал шестой пример, функция main один в один с вышеприведенной Вами... При запуске последовательно выскакивают, если жать "Пропустить":Voltron писал(а):Эти примеры смотрели? Чтобы не быть голословным прикрепляю один из примеров, собранный в QtCreator.Не верю ⓒ. QgsApplication прямой наследник QApplication. У вас точно все необходимые библиотеки и файлы находятся? Вот фрагмент кода из рабочего приложенияGIS-dev писал(а):Получается что при использовании QgsApplication вместо стандартного QT'шного QApplication приложение не может инициализироваться!
Код: Выделить всё
int main(int argc, char ** argv)
{
QgsApplication app(argc, argv, TRUE);
MainWindow * mypMainWindow = new MainWindow();
mypMainWindow->show();
return app.exec();
}
Все прекрасно инициализируется и запускается



Впечатление, что конструктор 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 по этим путям я ранее закинул, что впрочем никак не повлияло на результат...
-
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
Работающий пример приложения QGIS на С++
Пересборка 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.
А может кто-нибудь даст qgis_core.lib+qgis_gui.lib и соответствующие им ddl'ки? Из заведомо работающего проекта под Windows.

-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: Работающий пример приложения QGIS на С++
Tethys это версия 1.5, и уже давно устарела. Я бы рекомендовал пользоваться qgis-dev из OSGeo4W, т.к. это самая актуальная версия.GIS-dev писал(а):Какие библиотеки/инклуды лучше использовать, из "\OSGeo4W\apps\qgis-dev", "\OSGeo4W\apps\qgis" или из папки установленного QGIS "\Quantum GIS Tethys\apps\qgis" ?
Пожалуйста (~3 Mb). В архиве проект под Windows со всеми либами. Cобирал в VSE, все зависимости из OSGeo4WGIS-dev писал(а):А может кто-нибудь даст qgis_core.lib+qgis_gui.lib и соответствующие им ddl'ки? Из заведомо работающего проекта под Windows.
Да, я тут посмотрел в хрустальный шар... Возможно, проблема в том, что у вас библиотеки и проект собраны в разных конфигурациях. Например, библиотеки релизные, а проект отладочный. Для справки, QGIS в OSGeo собран как RelWithDebInfo.
-
- Участник
- Сообщения: 54
- Зарегистрирован: 27 авг 2009, 11:01
- Репутация: 1
Re: Работающий пример приложения QGIS на С++
Проблема решена! Спасибо за проект!
Во-первых, 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%
Во-первых, 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%
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя