QGIS - Tvorba zásuvného modulu krok za krokem: Porovnání verzí
Řádek 122: | Řádek 122: | ||
== Ikonka, tlačítko a menu pluginu == | == Ikonka, tlačítko a menu pluginu == | ||
; Hlavička | |||
<source lang="cpp"> | <source lang="cpp"> | ||
#ifndef QGSSAMPLEPLUGIN_H | |||
#define QGSSAMPLEPLUGIN_H | |||
#include "qgisplugin.h" | |||
#include <QObject> | #include <QObject> | ||
Řádek 131: | Řádek 135: | ||
/* Testovaci plugin pro QGIS - prostorove predikaty */ | /* Testovaci plugin pro QGIS - prostorove predikaty */ | ||
class QgsSamplePlugin: public QObject, public QgisPlugin | class QgsSamplePlugin: public QObject, public QgisPlugin | ||
{ | |||
//Q_OBJECT | |||
public: | |||
QgsSamplePlugin(QgisInterface *); | |||
~QgsSamplePlugin(); | |||
void initGui(); | |||
void unload(); | |||
private: | private: | ||
QgisInterface *mIface; | QgisInterface *mIface; | ||
Řádek 138: | Řádek 150: | ||
private slots: | private slots: | ||
void calculate(); | void calculate(); | ||
... | }; | ||
#endif // QGSSAMPLEPLUGIN_H | |||
</source> | |||
; C++ soubor | |||
<source lang="cpp"> | |||
#include "qgssampleplugin.h" | |||
#include "qgisinterface.h" | |||
#include <QAction> | |||
#ifdef WIN32 | |||
#define QGISEXTERN extern "C" __declspec( dllexport ) | |||
#else | |||
#define QGISEXTERN extern "C" | |||
#endif | |||
QgsSamplePlugin::QgsSamplePlugin(QgisInterface* iface): mIface(iface), mAction(0) | |||
{ | |||
} | |||
QgsSamplePlugin::~QgsSamplePlugin() | |||
{ | |||
} | |||
// Zobrazit elementy GUI nastrojove listy a menu pluginu | |||
void QgsSamplePlugin::initGui() | |||
{ | |||
mAction = new QAction(tr("&Prostorovy predikat within"), this); | |||
connect(mAction, SIGNAL(activated()), this, SLOT(calculate())); | |||
mIface->addToolBarIcon(mAction); | |||
mIface->addPluginToMenu(tr("&Prostorovy predikat"), mAction); | |||
} | |||
// Odstranit alokovane GUI elementy | |||
void QgsSamplePlugin::unload() | |||
{ | |||
mIface->removeToolBarIcon(mAction); | |||
mIface->removePluginMenu(tr("&Prostorovy predikat within"), mAction); | |||
delete mAction; | |||
} | |||
// generator pluginu | |||
QGISEXTERN QgisPlugin* classFactory(QgisInterface* iface) | |||
{ | |||
return new QgsSamplePlugin(iface); | |||
} | |||
QGISEXTERN QString name() | |||
{ | |||
return "Within"; | |||
} | |||
QGISEXTERN QString description() | |||
{ | |||
return "Prostorovy predikat within"; | |||
} | |||
QGISEXTERN QString version() | |||
{ | |||
return "0.00001"; | |||
} | |||
// Typ pluginu (UI nebo MapLayer plugin) | |||
QGISEXTERN int type() | |||
{ | |||
return QgisPlugin::UI; | |||
} | |||
// Odstranit plugin | |||
QGISEXTERN void unload(QgisPlugin* theQgsSamplePluginPointer) | |||
{ | |||
delete theQgsSamplePluginPointer; | |||
} | |||
</source> | </source> | ||
{{GFOSS}} | {{GFOSS}} | ||
{{Programování}} | {{Programování}} | ||
{{C++}} | {{C++}} |
Verze z 7. 12. 2010, 23:02
Stránka obsahuje poznámky pro tvorbu vlastního zásuvného modulu pro aplikaci QGIS. Navržený modul má na vstupu dvě vektorové vrstvy - bodovou a polygonovou. Na výstupu vytvoří novou vektorovou vrstvu obsahující pouze body ležící uvnitř polygonů (viz příklad pro knihovnu OGR).
Minimální kód
Projekt obsahuje tři soubory:
- Soubor projektu sampleplugin.pro
# cesta k adresari se zdrojovymi texty QGISu
QGIS_DIR = /home/martin/src/qgis_trunk
TEMPLATE = lib
CONFIG = qt
QT += xml \
qt3support
unix:LIBS += -L/$$QGIS_DIR/lib \
-lqgis_core \
-lqgis_gui
INCLUDEPATH += $$QGIS_DIR/src/ui \
$$QGIS_DIR/src/plugins \
$$QGIS_DIR/src/gui \
$$QGIS_DIR/src/raster \
$$QGIS_DIR/src/core \
$$QGIS_DIR
SOURCES = qgssampleplugin.cpp
HEADERS = qgssampleplugin.h
DEST = sampleplugin.so
DEFINES += GUI_EXPORT= \
CORE_EXPORT=
- Hlavičkový soubor pluginu qgssampleplugin.h
#ifndef QGSSAMPLEPLUGIN_H
#define QGSSAMPLEPLUGIN_H
#include "qgisplugin.h"
/* Testovaci plugin pro QGIS - prostorove predikaty */
class QgsSamplePlugin: public QgisPlugin
{
public:
QgsSamplePlugin(QgisInterface *);
~QgsSamplePlugin();
void initGui();
void unload();
private:
QgisInterface *mIface;
};
#endif // QGSSAMPLEPLUGIN_H
- C++ soubor qgssampleplugin.cpp
#include "qgssampleplugin.h"
#ifdef WIN32
#define QGISEXTERN extern "C" __declspec( dllexport )
#else
#define QGISEXTERN extern "C"
#endif
QgsSamplePlugin::QgsSamplePlugin(QgisInterface* iface): mIface(iface)
{
}
QgsSamplePlugin::~QgsSamplePlugin()
{
}
// Zobrazit elementy GUI nastrojove listy a menu pluginu
void QgsSamplePlugin::initGui()
{
}
// Odstranit alokovane GUI elementy
void QgsSamplePlugin::unload()
{
}
// generator pluginu
QGISEXTERN QgisPlugin* classFactory(QgisInterface* iface)
{
return new QgsSamplePlugin(iface);
}
QGISEXTERN QString name()
{
return "Within";
}
QGISEXTERN QString description()
{
return "Prostorovy predikat within";
}
QGISEXTERN QString version()
{
return "0.00001";
}
// Typ pluginu (UI nebo MapLayer plugin)
QGISEXTERN int type()
{
return QgisPlugin::UI;
}
// Odstranit plugin
QGISEXTERN void unload(QgisPlugin* theQgsSamplePluginPointer)
{
delete theQgsSamplePluginPointer;
}
- Hlavička
#ifndef QGSSAMPLEPLUGIN_H
#define QGSSAMPLEPLUGIN_H
#include "qgisplugin.h"
#include <QObject>
class QAction;
/* Testovaci plugin pro QGIS - prostorove predikaty */
class QgsSamplePlugin: public QObject, public QgisPlugin
{
//Q_OBJECT
public:
QgsSamplePlugin(QgisInterface *);
~QgsSamplePlugin();
void initGui();
void unload();
private:
QgisInterface *mIface;
QAction *mAction;
private slots:
void calculate();
};
#endif // QGSSAMPLEPLUGIN_H
- C++ soubor
#include "qgssampleplugin.h"
#include "qgisinterface.h"
#include <QAction>
#ifdef WIN32
#define QGISEXTERN extern "C" __declspec( dllexport )
#else
#define QGISEXTERN extern "C"
#endif
QgsSamplePlugin::QgsSamplePlugin(QgisInterface* iface): mIface(iface), mAction(0)
{
}
QgsSamplePlugin::~QgsSamplePlugin()
{
}
// Zobrazit elementy GUI nastrojove listy a menu pluginu
void QgsSamplePlugin::initGui()
{
mAction = new QAction(tr("&Prostorovy predikat within"), this);
connect(mAction, SIGNAL(activated()), this, SLOT(calculate()));
mIface->addToolBarIcon(mAction);
mIface->addPluginToMenu(tr("&Prostorovy predikat"), mAction);
}
// Odstranit alokovane GUI elementy
void QgsSamplePlugin::unload()
{
mIface->removeToolBarIcon(mAction);
mIface->removePluginMenu(tr("&Prostorovy predikat within"), mAction);
delete mAction;
}
// generator pluginu
QGISEXTERN QgisPlugin* classFactory(QgisInterface* iface)
{
return new QgsSamplePlugin(iface);
}
QGISEXTERN QString name()
{
return "Within";
}
QGISEXTERN QString description()
{
return "Prostorovy predikat within";
}
QGISEXTERN QString version()
{
return "0.00001";
}
// Typ pluginu (UI nebo MapLayer plugin)
QGISEXTERN int type()
{
return QgisPlugin::UI;
}
// Odstranit plugin
QGISEXTERN void unload(QgisPlugin* theQgsSamplePluginPointer)
{
delete theQgsSamplePluginPointer;
}