まず、空のプロジェクトを作成して、クラスを1つ追加します。
クラス名はここでは「QgsCompassSurveyDataProvider」とします。
クラスは、QgsVectorDataProviderクラスの派生クラスにします。
作成したら、とりあえず必要なコードを記述します。
以下のコードは、ビルドエラーが出ないための最低限の記述です。
QgsCompassSurveyDataProvider.h
1: #pragma once 2: 3: #include "qgsvectordataprovider.h" 4: 5: class QgsCompassSurveyDataProvider : public QgsVectorDataProvider 6: { 7: public: 8: QgsCompassSurveyDataProvider( QString uri = QString() ); 9: ~QgsCompassSurveyDataProvider(void); 10: 11: virtual QgsCoordinateReferenceSystem crs(); 12: virtual QgsRectangle extent(); 13: virtual bool isValid(); 14: QString name() const; 15: QString description() const; 16: virtual void select( QgsAttributeList fetchAttributes = QgsAttributeList(), 17: QgsRectangle rect = QgsRectangle(), 18: bool fetchGeometry = true, 19: bool useIntersect = false ); 20: virtual bool nextFeature( QgsFeature& feature ); 21: virtual QGis::WkbType geometryType() const; 22: long featureCount() const; 23: uint fieldCount() const; 24: virtual const QgsFieldMap & fields() const; 25: void rewind(); 26: 27: private: 28: QgsRectangle mExtent; 29: bool mValid; 30: QgsAttributeList mAttributesToFetch; 31: QgsRectangle mSelectionRectangle; 32: QgsFieldMap attributeFields; 33: }
QgsVectorDataProvider
クラスは抽象クラスなので、純粋仮想関数をオーバーライドする必要があります。
また、コンストラクタはQString
型の変数を引数として受け取るようにします。
クラスの宣言に合わせて、関数の定義を行っておきます。
とりあえずこの段階では最低限の定義です。
QgsCompassSurveyDataProvider.cpp
1: #include "QgsCompassSurveyDataProvider.h" 2: 3: static const QString TEXT_PROVIDER_KEY = "compasssurvey"; // このキーはQGISがプロバイダを選択する際に使用される 4: static const QString TEXT_PROVIDER_DESCRIPTION = "Compass survey data provider"; 5: 6: QgsCompassSurveyDataProvider::QgsCompassSurveyDataProvider( QString uri ) 7: : QgsVectorDataProvider( uri ) 8: { 9: } 10: 11: QgsCompassSurveyDataProvider::~QgsCompassSurveyDataProvider(void) 12: { 13: } 14: 15: QgsCoordinateReferenceSystem QgsCompassSurveyDataProvider::crs() 16: { 17: return QgsCoordinateReferenceSystem(); // return default CRS 18: } 19: 20: QgsRectangle QgsCompassSurveyDataProvider::extent() 21: { 22: return mExtent; 23: } 24: 25: bool QgsCompassSurveyDataProvider::isValid() 26: { 27: return mValid; 28: } 29: 30: QString QgsCompassSurveyDataProvider::name() const 31: { 32: return TEXT_PROVIDER_KEY; 33: } 34: 35: QString QgsCompassSurveyDataProvider::description() const 36: { 37: return TEXT_PROVIDER_DESCRIPTION; 38: } 39: 40: void QgsCompassSurveyDataProvider::select( QgsAttributeList fetchAttributes, 41: QgsRectangle rect, 42: bool fetchGeometry, 43: bool useIntersect ) 44: { 45: } 46: 47: bool QgsCompassSurveyDataProvider::nextFeature( QgsFeature& feature ) 48: { 49: return false; 50: } 51: 52: QGis::WkbType QgsCompassSurveyDataProvider::geometryType() const 53: { 54: return QGis::WKBLineString; 55: } 56: 57: long QgsCompassSurveyDataProvider::featureCount() const 58: { 59: return 0; 60: } 61: 62: uint QgsCompassSurveyDataProvider::fieldCount() const 63: { 64: return attributeFields.size(); 65: } 66: 67: const QgsFieldMap & QgsCompassSurveyDataProvider::fields() const 68: { 69: return attributeFields; 70: } 71: 72: void QgsCompassSurveyDataProvider::rewind() 73: { 74: } 75: 76: QGISEXTERN QgsCompassSurveyDataProvider *classFactory( const QString *uri ) 77: { 78: return new QgsCompassSurveyDataProvider( *uri ); 79: } 80: 81: QGISEXTERN QString providerKey() 82: { 83: return TEXT_PROVIDER_KEY; 84: } 85: 86: QGISEXTERN QString description() 87: { 88: return TEXT_PROVIDER_DESCRIPTION; 89: } 90: 91: QGISEXTERN bool isProvider() 92: { 93: return true; 94: }
下の4つの関数はプラグインがエクスポートする関数です。
このあたりはGUIプラグインと構成が似ているかと思います。
isProvider()
関数でreturn true
とすることで、QGIS側はプロバイダプラグインであると認識します。
さらに、プロジェクトの設定を以下のように行います。
プロジェクトの設定(デバッグ版)
メニュー | サブメニュー | 項目 | 設定値 |
---|---|---|---|
全般 | 構成の種類 | ダイナミック ライブラリ (.dll) | |
文字セット | 設定なし | ||
C++ | 全般 | 追加のインクルードディレクトリ | {QGISのソースコードディレクトリ}srcgui {QGISのソースコードディレクトリ}srcplugins {QGISのソースコードディレクトリ}srccore |
プリプロセッサ | プリプロセッサの定義 | _WINDOWS UNICODE WIN32 QT_LARGEFILE_SUPPORT _CRT_SECURE_NO_WARNINGS QT_DLL QT_CORE_LIB QT_THREAD_SUPPORT CORE_EXPORT=__declspec(dllimport) | |
リンカ | 入力 | 追加の依存ファイル | C:Qt2010.01qtlibQtCored4.lib C:Qt2010.01qtlibqtmaind.lib C:Qt2010.01qtlibQtGuid4.lib C:Qt2010.01qtlibQtSql4.lib {QGISのソースコードディレクトリ}buildsrccoreDebugqgis_core.lib {QGISのソースコードディレクトリ}buildsrcguiDebugqgis_gui.lib |
プリプロセッサはもしかしたら過不足があるかと思います。
コンパイルができたら、実際の機能を実装していきますが、プラグインのテストができるようにするために、
先にプロバイダプラグインを呼び出すGUIプラグインを作成しておいたほうがいいでしょう。