首先环境已经配置好。看我上一篇怎么配置
#if 1
#include "mainwindow.h"
#include<QApplication>
#include<QWidget>
#include <qgsapplication.h>
#include <qgsproviderregistry.h>
int main(int argc, char *argv[])
{
// 参数三: 如果需要GUI应用程序,则设置为true;对于仅控制台应用程序,设置false
QgsApplication a(argc, argv, true);
QgsApplication::setPrefixPath("C:OSGeo4W/install/apps/qgis-ltr", true); // 设置qgis路径
QgsApplication::setPluginPath("C:OSGeo4W/install/apps/qgis-ltr/plugins"); // 设置插件路径
QgsApplication::initQgis(); // 初始化QGis
MainWindow w;
// w.loadShapeFile();
w.slotAddRasterLayerSet();
return a.exec();
}
#endif
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<qgsmapcanvas.h>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
//加载矢量数据
void loadShapeFile();
// 添加栅格图层集
void slotAddRasterLayerSet();
#if 0
void openVector();
void delImage();
void delVector();
#endif
private:
//画布元素
QgsMapCanvas canvas;
QList<QgsMapLayer *> layers;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include<qgsvectorlayer.h>
#include<qdebug.h>
#include<QFileDialog>
#include<QMessageBox>
#include"QgsRasterLayer.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
}
MainWindow::~MainWindow()
{
}
void MainWindow::loadShapeFile(){
//实例化矢量图层 通过准备好的矢量文件绝对路径来初始化
QgsVectorLayer* pVectorLayer = new QgsVectorLayer("D:/zhuomian/ycn/qt/untitled2/neimeng_road/neimeng_road.shp","地区");
//检查一下是否成功
qDebug()<<"Is layer valid:"<<pVectorLayer->isValid();
//将该图层放入画布里
canvas.setLayers(QList<QgsMapLayer*>()<<pVectorLayer);
//画布也是QWidget的子类,可以设置标题
canvas.setWindowTitle("QGIS二次开发:画布");
canvas.show();
//设置画布大小,来达到可见图层的完整范围
canvas.zoomToFullExtent();
}
void MainWindow::slotAddRasterLayerSet()
{
// 创建光栅层对象并加入本地文件
QgsRasterLayer *qRasterLayer = new QgsRasterLayer("D:/zhuomian/ycn/qt/untitled2/233/233_Level_5.tif", "raster");
//检查一下是否成功
if (!qRasterLayer || !qRasterLayer->isValid()) { return ; }
qRasterLayer->setContrastEnhancement(QgsContrastEnhancement::StretchToMinimumMaximum, QgsRasterMinMaxOrigin::MinMax);
//将该图层放入画布里
canvas.setLayers(QList<QgsMapLayer*>()<<qRasterLayer);
//画布也是QWidget的子类,可以设置标题
canvas.setWindowTitle("QGIS二次开发:画布");
canvas.show();
//设置画布大小,来达到可见图层的完整范围
canvas.zoomToFullExtent();
}
#if 0
void MainWindow::openVector(){
QgsVectorLayer *my_layer;
QString fileName = QFileDialog::getOpenFileName(this,tr("Open image file"),"","*.shp");
QStringList temp = fileName.split('/');
QString basename = "shpFile";
my_layer = new QgsVectorLayer(fileName,basename,"ogr");
if(!my_layer->isValid()){
QMessageBox::critical(this,"erroe",QString("layer is invalid:\n")+fileName);
}
layers.push_front(my_layer);
mapCanvas->setExtent(my_layer->extent());
mapCanvas->setLayers(layers);
mapCanvas->refresh();
}
void MainWindow::delImage(){
for(int i = 0;i<layers.size();i++){
if(layers[i]->name() == "tifFile"){
layers.removeAt(i);
mapCanvas->setLayers(layers);
mapCanvas->refresh();
return;
}
}
}
void MainWindow::delVector(){
for(int i = 0;i<layers.size();i++){
if(layers[i]->name() == "shapFile"){
layers.removeAt(i);
mapCanvas->setLayers(layers);
mapCanvas->refresh();
return;
}
}
}
#endif