プロジェクトを作成するときに、空のプロジェクトが作成されると前述しました。つまり、Qt が提供する包括的な開発キット Qt Creator は使用されず、Qt Visual Studio Tools などのツールも使用されません。
しかし、後でわかったのですが、より満足のいくインターフェイス レイアウトを実現したい場合は、やはり自分で UI ファイルを作成する必要があり、QT プラグインを使用しない場合、独自の UI ファイルをインポートするのはそれほど簡単ではありません。 VS でコンパイルして、QT プラグインの使い方を紹介します。QGIS の 2 回目の開発に入ります。
Qt VS Tools プラグインを使用するため、環境構成を変更する必要があります。(QT プラグインを使用することもできます。次のブログを参照してください~)
ステップ 1: プラグインをインストールする
Qt Visual Studio Tools をインストールするときに、バージョン 2.7.2 をここにインストールしました。下位バージョンをインストールするときは、忘れずにネットワークを切断し、自動更新のチェックを外してください。
ダウンロード アドレス /development_releases/vsaddin/2.7.2 のインデックス
インストール後、忘れずに QT ディレクトリを設定してください。ここで使用する QT はバージョン 5.14.2 です。
ステップ 2: Qt ウィジェット アプリケーションを作成する
QgsMapCanvas は QDomNode ファイルを使用する必要があり、QDomNode は Qt XML ライブラリに含まれる XML ファイルであるため、XML を必ず確認してください。「デバッグ」のチェックを外すと、テスト後にデバッグ環境で実行すると次のエラーが報告されます。
作成したスクリーンショットは以下の通り
次に、ここで QMainWindow を選択できます。もちろん QWidget も選択できます
ステップ 3: VS2017 を構成する
そして最後の記事QGIS 二次開発 2: 二次開発のために QGIS を再コンパイルしない_プログラマーモニターのブログ - CSDN ブログ
VS を構成する手順は同じですが、QT に関連するものはすべて無視できるという点が異なります。
VC++ ディレクトリ (ディレクトリとライブラリ ディレクトリを含む) の構成は次のとおりです
C/C++、プリプロセッサ、次のように構成
_USE_MATH_DEFINES
リンカー、入力、追加の依存関係は次のように構成されています
qgis_core.lib
qgis_gui.lib
C/C++、言語では、C++ 言語標準を設定します。
C/C++ では、すべてのオプション、追加オプションを /utf-8 に設定します。
デバッグ情報を設定します。注意する必要があります。最初に入力します。
PATH=D:\OSGeo4W\bin;D:\OSGeo4W\apps\qgis-ltr\bin;D:\OSGeo4W\apps\Qt5\bin
次に、「親またはプロジェクトのデフォルトから継承」のチェックを忘れずに外してください。
それ以外の場合はエラーが報告されます
main.cpp コードを次のように変更します。内部のパスを変更することを忘れないでください。操作が成功した場合は、構成が成功したことを意味します。
#include <qgsapplication.h>
#include <qgsproviderregistry.h>
#include <qgsmapcanvas.h>
#include <qgsvectorlayer.h>
int main(int argc, char **argv)
{
// 创建 QgsApplication 实例
QgsApplication app(argc, argv, true);
// 设置并检查数据插件目录
QgsProviderRegistry::instance("D:/OSGeo4W/apps/qgis-ltr/plugins");
// 控制台打印已载入的插件目录
qDebug() << "QGIS data providers loaded:" << QgsProviderRegistry::instance()->providerList();
// 设置 GDAL 数据目录环境变量
qputenv("GDAL_DATA", "D:\\OSGeo4W\\apps\\gdal\\share\\gdal");
// 创建 QgsCanvas 画布实例
QgsMapCanvas c;
// 从磁盘 .shp 文件创建矢量图层
QgsVectorLayer* pVectorLayer = new QgsVectorLayer(u8"E:\\TestImage\\全国省界\\全国省界.shp", u8"省界");
// 确认图层是否创建成功
qDebug() << "Is layer valid:" << pVectorLayer->isValid();
// 将图层添加到画布上
c.setLayers(QList<QgsMapLayer*>() << pVectorLayer);
// 设置画布窗体标题并显示画布
// 画布本身是 QWidget 的子类,因此可以承担 QWidget 的所有操作
c.setWindowTitle(u8"QGIS 二次开发:画布");
c.show();
// 缩放到图层的空间范围
c.zoomToFullExtent();
// 启动 QgsApplication 实例
return app.exec();
}