[Qgis-developer] cpp-plugin for QGIS 2.0
Mikhail Tchernychev
misha at mail.geometrics.com
Thu Nov 7 10:25:56 PST 2013
Hi,
I am bit late but here are my two cents.
I was researching ways how to compile applications with QGIS. I did not
get very far
in terms of developing my application, but I think I solved some
compiling / linking
problems.
Here is a small manual
1. All what you need is Os4geoW with development files and VS 2010 Express.
Make sure you install appropriate headers / libs from os4geow web
site.
2. Create your CPP fle. Example is attached.
3. Fire Os3GeoW command window (I used windows cmd, not MSYS) and navigate
to you folder. Type
qmake -project
This will create .pro file fore you.
4. Now you need to adjust it. Edit with your favorite editor.
What you need to change:
QT += xml
INCLUDEPATH += . C:/OSGeo4W/apps/qgis/include
DEFINES += CORE_EXPORT= GUI_EXPORT=
LIBS += C:/OSGeo4W/apps/qgis/lib/qgis_analysis.lib
C:/OSGeo4W/apps/qgis/lib/qgis_core.lib \
C:/OSGeo4W/apps/qgis/lib/qgis_gui.lib \
C:/OSGeo4W/apps/qgis/lib/qgis_networkanalysis.lib
I attached my "pro" file. You can adjust as you need. Better if you use
relative paths.
5. Now again use qmake but this time to create VS project
qmake -tp vc qgis1_clone.pro
6. Switch to VS 2010 Express. Start it and load "qgis1_clone.vcproj"
VS will show conversion wizard, just go through. Now you can compile
"release" for your application.
So far I got only "release" working but by adjusting libraries it
should be possible to get
"debug" as well.
7. You need to change some project setting in VS, apparently qmake did
not make them
Here is for release version
- change executable for debug: release\qgis1_clone.exe
- change debug environment: add PATH=C:\OSGeo4W\bin;C:\OSGeo4W\apps\qgis\bin
or whatever our path is
Now you can start application within VS (Crtl+F5)
I did not get debug working. I am getting
"The application has failed to start because its side-by-side
configuration is in
correct. Please see the application event log for more detail."
It's something wrong with VS redistributable. Perhaps someone could
shed a light
on this.
I hope it helps,
Best Regards
Mikhail
On 11/7/2013 4:25 AM, Jürgen E. Fischer wrote:
> Hi Susann,
>
> On Thu, 07. Nov 2013 at 11:53:45 +0100, SSchmidt at gfi-gis.de wrote:
>> What the hell ? :-)
>> It is so nice, There are opening doorways...
>> I got the sources for the release 2.0.1 - however :-) and cmake builds me
>> a qgis2.0.1.sln for my VisualStudio. Now compiling my QGis is in progress.
>> Thank you for guiding me a few steps forward! I'm curious about it if it
>> is running after this, i will tell you...
> You could also use the libraries shipped with OSGeo4W (also in the standalone
> installer). Note that the 32bit version is built with VS2008 and 64bit with
> VS2010.
>
>
> Jürgen
>
-------------- next part --------------
//
// QGIS Includes
//
#include <qgsapplication.h>
#include <qgsproviderregistry.h>
#include <qgssinglesymbolrendererv2.h>
#include <qgsmaplayerregistry.h>
#include <qgsvectorlayer.h>
#include <qgsmapcanvas.h>
//
// Qt Includes
//
#include <QtCore/QString>
#include <QtGui/QApplication>
#include <QtGui/QWidget>
int main(int argc, char ** argv)
{
// Start the Application
QgsApplication app(argc, argv, true);
QString myPluginsDir = "/home/timlinux/apps/lib/qgis";
QString myLayerPath = "/home/timlinux/gisdata/brazil/BR_Cidades/";
QString myLayerBaseName = "Brasil_Cap";
QString myProviderName = "ogr";
// Instantiate Provider Registry
QgsProviderRegistry::instance(myPluginsDir);
// create a maplayer instance
QgsVectorLayer * mypLayer =
new QgsVectorLayer(myLayerPath, myLayerBaseName, myProviderName);
QgsSingleSymbolRendererV2 *mypRenderer; // = new QgsSingleSymbolRendererV2();
QList <QgsMapCanvasLayer> myLayerSet;
//mypLayer->setRendererV2(mypRenderer);
if (mypLayer->isValid())
{
qDebug("Layer is valid");
}
else
{
qDebug("Layer is NOT valid");
}
// Add the Vector Layer to the Layer Registry
QgsMapLayerRegistry::instance()->addMapLayer(mypLayer, TRUE);
// Add the Layer to the Layer Set
myLayerSet.append(QgsMapCanvasLayer(mypLayer, TRUE));
// Create the Map Canvas
QgsMapCanvas * mypMapCanvas = new QgsMapCanvas(0, 0);
mypMapCanvas->setExtent(mypLayer->extent());
mypMapCanvas->enableAntiAliasing(true);
mypMapCanvas->setCanvasColor(QColor(255, 255, 255));
mypMapCanvas->freeze(false);
// Set the Map Canvas Layer Set
mypMapCanvas->setLayerSet(myLayerSet);
mypMapCanvas->setVisible(true);
mypMapCanvas->refresh();
// Start the Application Event Loop
return app.exec();
}
-------------- next part --------------
######################################################################
# Automatically generated by qmake (2.01a) Thu Nov 7 09:53:39 2013
######################################################################
TEMPLATE = app
QT += xml
TARGET =
DEPENDPATH += .
INCLUDEPATH += . C:/OSGeo4W/apps/qgis/include
DEFINES += CORE_EXPORT= GUI_EXPORT=
LIBS += C:/OSGeo4W/apps/qgis/lib/qgis_analysis.lib C:/OSGeo4W/apps/qgis/lib/qgis_core.lib \
C:/OSGeo4W/apps/qgis/lib/qgis_gui.lib \
C:/OSGeo4W/apps/qgis/lib/qgis_networkanalysis.lib
# Input
SOURCES += qgis1.cpp
More information about the Qgis-developer
mailing list