QT_QGIS_基本使用

​ 1、打开矢量图层

​ 2、新建矢量图层

​ 1、添加几何要素——点

​ 2、添加几何要素——线

​ 1、打开栅格图层

/* #include "QgsMapCanvas"

* class QgsMapCanvas;

* 继承于QWidget,可以直接当成Widget使用

*/

QgsMapCanvas* m_canvas = new QgsMapCanvas; // 实例化画布

QgsMapToolPan * toolPan = new QgsMapToolPan(m_canvas); // 新建移动工具

// QgsMapToolZoom * toolZoom = new QgsMapToolZoom(m_canvas,true); // 放大工具

// m_canvas->setMapTool(toolZoom);

m_canvas->setMapTool(toolPan); // 将移动工具设置到画布

m_canvas->freeze(false); // 画布解冻

m_canvas->setCanvasColor(QColor(255,255,255)); // 设置画布颜色

m_canvas->setVisible(true); // 设置可见

m_canvas->enableAntiAliasing(true); // 设置可抗锯齿

QGridLayout * layout = new QGirdLayout(this);

layout->addWidget(m_canvas); // 显示画布

1、打开矢量图层

QString fileName = QFileDialog::getOpenFileName(this,

tr("Open shape file"),

"",

"*.shp"); // 选择文件

QStringList list = fileName.split("/"); // 通过"/" 分隔获取的路径

Qstring baseName = list.back; // 图层名

/* #include "qgsvectorlayer.h"

* class QgsVectorLayer;

* 继承 QgsMapLayer

* @parameter1 要打开的文件

* @parameter2 图层名称

* @parameter3 数据提供者的名称,"memory"/"postgres"/...

*/

QgsVectorLayer * layer = new QgsVectorLayer(fileName,baseName,"ogr"); // 实例化矢量图层类

if(!layer->isValid()) // 判断图层是否有效

{

return;

}

QList m_layers; // 创建一个容器用于保存图层

m_layers.append(layer); // 将打开的图层添加到容器

m_canvas->setLayers(m_layers); // 将容器的中的图层设置到画布

2、新建矢量图层

1、添加几何要素——点

/* @parameter1 组成

* 几何类型:

* 点 "Point?"

* 线 "LineString?"

* 多边形 "Polygon?"

* 参照坐标系:

* "crs=epsg:4326&"

* 添加字段:

* "field=id:integer&field=name:string(50)&"

* 创建索引:

* "index=yes&"

*/

QgsVectorLayer * pointLayer = new QgsVectorLayer("Point?crs=epsg:4326&","MyPoint","memory"); // 实例化矢量图层,作为点图层

pointLayer->startEditing(); // 设置图层状态为开始编辑

/* #include "qgsgeometry.h"

* class QgsGeometry;

* 几何类

*/

QgsGeometry point = QgsGeometry::fromPointXY(QgsPointXY(116.46,39.92)); // 调用静态函数,实例化一个几何点

/* #include "qgsfeature.h"

* class QgsFeature;

* QGis 要素类

*/

QgsFeature feature; // 创建要素

feature.setGeometry(point); // 将几何点设置为要素

feature.setAttributes(QgsAttributes() << QVariant(1) << QVariant("test")); // 设置要素属性

/* #include "qgsvectordataprovider.h"

* class QgsVectorDataProvider;

* 继承于 QgsDataProvider(同样继承于此类的还有 QgsRasterDataProvider)

* 是矢量数据提供者的基类

*/

QgsVectorDataProvider * provider = pointLayer->dataProvider(); // 获取点图层的数据提供者的指针,用于添加要素

provider->addFeature(feature); // 将点要素添加到矢量层

// provider->addFeatures(featureList << feature); // 此方法用于添加多个要素

pointLayer->commitChanges(); // 保存图层

pointLayer->updateExtents(); // 更新图层

m_layer.push_front(pointLayer); // 将设置好的图层添加到保存图层的容器中

m_canvas->setExtent(pointLayer->extent()); // 设置画布范围为当前图层的范围,也就是将图层平铺到画布上

m_canvas->setLayers(m_layer); // 将容器设置到画布

m_canvas->refresh(); // 刷新画布

2、添加几何要素——线

/* 添加线的流程和点基本一样

*/

QgsVectorLayer * pointLayer = new QgsVectorLayer("LineString?crs=epsg:4326","MyPoint","memory");

pointLayer->startEditing(); // 设置图层状态为开始编辑

QgsPolyline l;

l << QgsPoint(116.2448,40.0573) << QgsPoint(116.2448,80)

<< QgsPoint(110,80) << QgsPoint(50,50) << QgsPoint(116,40); // 添加若干坐标,组成一条拆线

QgsGeometry line = QgsGeometry::fromPolyline(line); // 调用静态函数,实例化一条拆线

QgsFeature feature; // 创建要素

feature.setGeometry(line); // 设置几何拆线设置为要素

feature.setAttributes(QgsAttributes() << QVariant(1) << QVariant("test")); // 设置属性

QgsVectorDataProvider * provider = pointLayer->dataProvider(); // 获取一个用于添加要素的指针

provider->addFeature(feature); // 将几何点添加到矢量层

// provider->addFeatures(featureList << feature); // 此方法用于添加多个要素

pointLayer->commitChanges(); // 保存图层

pointLayer->updateExtents(); // 更新图层

m_layer.push_front(pointLayer); // 将设置好的图层添加到保存图层的容器中

m_canvas->setExtent(pointLayer->extent()); // 设置画面范围为图层的范围,也就是将图层平铺到画布上

m_canvas->setLayers(m_layer); // 将容器设置到画布

m_canvas->refresh(); // 刷新画布

1、打开栅格图层

// 还没写

后续更新...

qt qgis linux,QT_QGIS_基本使用相关推荐

  1. qt qgis linux,QGIS初识-Qt编译环境配置

    2.添加库头引用:OSGEO4W/include,QGIS/include; 3.添加宏指令: CORE_EXPORT=__declspec(dllimport) GUI_EXPORT=__decls ...

  2. 使用QT程序控制Linux开发板上的继电器(一)

    `使用QT程序控制Linux开发板上的继电器(一)` 测试平台介绍 测试系统接线 编写PlatformIO驱动程序 修改设备树 烧录设备树 Platform字符设备驱动设备框架 完善驱动框架 编写测试 ...

  3. Qt在Linux下如何查找可用字体

    最近遇到一个问题:一个Qt程序在Windows上正常运行,在Linux下编译运行后汉字就全变成方块了,成了名副其实的"方块字". 我一开始考虑是字符编码问题,调用QChar::un ...

  4. QT在linux环境下读取和设置系统时间

    QT在linux环境下读取和设置系统时间 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:Fedora12 开发软件:QT 读取系统时间 ...

  5. QT OpenCV Linux

    OpenCV with Qt OpenCV Tutorials-Installation in Linux          use this tutorial to install OpenCV i ...

  6. qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)

    Qt之主线程与子线程通信(linux下) 转载请注明出处:http://blog.csdn.net/feng1790291543 主线程与子线程通信主要是通过Qt上的Gui按钮,触发使得主线程上的信息 ...

  7. qt调用linux 进程,Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u014746574/article/d ...

  8. qt creator linux安装教程,- Qt Creator下载和安装(详细教程)

    如果想用一个exe干净利落的发布程序,就需要使用静态编译版的Qt库,网上有教程,我就不多说了,可以教大家用现成的,在Git-hub上正好有静态Qt库: https://github.com/foste ...

  9. linux下 发布qt程序,Linux下发布qt程序

    安装patchelf 百度搜索,然后解压 进入文件夹用终端打开 然后执行命令: ./configure make sudo make install 编译linuxdeployqt 源码下载地址: h ...

最新文章

  1. 剑指offer:面试题28. 对称的二叉树
  2. DbUtils工具类使用
  3. Sort_Buffer_Size 设置对服务器性能的影响
  4. Word2013、2016中页码总页数设置为当前节总页数
  5. 03_Introduction_to_AMBA_AXI
  6. 坑 之 Tensorflow安装在导入模块时会出现ImportError: DLL load failed: 找不到指定的模块的问题
  7. 安装spark1.3.1单机环境
  8. stl min函数_std :: min()函数以及C ++ STL中的示例
  9. JavaScript的OO特性:静态方法
  10. optistruct线性求解一次二次单元应力位移比较
  11. 用python写模拟鼠标脚本
  12. 彩虹易支付最新版开源版源码分享
  13. Javadoc 使用详解
  14. 凑个热闹 谈谈网红沈大师
  15. 【CSDN英雄会】黄帅:安全不是独行侠而是系统性的运维过程
  16. 将WordPress后台的open-sans字体加载源从Google Fonts换为360 CDN
  17. 所有计算机专业的学生应该认识到的
  18. 顶会速递 | ICLR 2020录用论文之元学习篇
  19. 图像处理软件(基本功能都已实现,含源码)
  20. 基于FPGA的多功能数字时钟设计报告

热门文章

  1. call()与apply()的区别与作用
  2. 拉格朗日乘子法几何意义
  3. android studio防止反编译,防反编译利器-Android studio混淆代码压缩apk包体积
  4. vscode remote ssh 重新连接_使用 VSCode 愉快地进行 R 远程开发
  5. OpenShift 4 - Knative教程 (6) Eventing之Channel和Subscription
  6. 使用Redis和Apache Kafka处理时间序列数据
  7. 统一并发 III——跨基准测试
  8. PostgreSQL中生成的列
  9. 为什么真正的神经元学得更快
  10. android 并排按钮,Android TextView和Button并排,ellipsize左侧TextView