QGIS 開発 5: VS は QT プラグインを使用して UI インターフェイスを作成します

プロジェクトを作成するときに、空のプロジェクトが作成されると前述しました。つまり、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();
}

Supongo que te gusta

Origin blog.csdn.net/KK_2018/article/details/132216223
Recomendado
Clasificación