当前位置: 首页 > news >正文

寻找网站开发黑龙江省建设安全协会网站

寻找网站开发,黑龙江省建设安全协会网站,网业车资格证怎么报名,那个网站可以做图标这里实现两个基本的 GIS 软件需求#xff1a;矢量图层的属性表显示#xff0c;以及根据属性筛选要素。 具体需求如下#xff1a; 加载一个矢量图层并打开其属性表#xff1b;输入筛选条件确认无误后#xff0c;画布上和属性表中均只显示筛选后的要素。 QGIS 提供了若干…这里实现两个基本的 GIS 软件需求矢量图层的属性表显示以及根据属性筛选要素。 具体需求如下 加载一个矢量图层并打开其属性表输入筛选条件确认无误后画布上和属性表中均只显示筛选后的要素。 QGIS 提供了若干类用于实现图层属性表。属性表基于 Qt 的 QTableView 实现利用了 QT中的Model/View 机制。QGIS 用于实现属性表所涉及到类比较多彼此关系也不太直观 这里仅做简单的总结。 本篇文章主要用到的与实现图层属性表相关的类有四个分别为 QgsVectorLayerCache 该类继承自QObject用于缓存给定QgsVectorLayer的特征缓存的特征可以通过QgsAbstractCacheIndex进行索引对给定用例进行适当的索引可能会大大提高性能。构造QgsAttributeTableModel时只能使用图层的数据缓存而不能直接使用原图层应该是为了避免数据冲突之类的问题。 QgsAttributeTableModel  一个由QgsVectorLayerCache支持的模型继承自QAbstractTableModel它能够为QAbstractItemView提供特征/属性信息作为QgsAttributeTableView的后端数据源。也能够为它的QModelIndexes生成编辑器小部件在本QGIS源代码中主要被称为“主模型”。 QgsAttributeTableView 该类继承自QgsTableView进而继承自QTableView。提供QgsVectorLayer特性的表视图是最终显示图层属性表的视图组件。 QgsAttributeTableFilterModel 该类的继承关系如下图所示为QSortFilterProxyModel和QgsFeatureModel的子类。其基类QSortFilterProxyModel作为数据源模型和视图的中间处理器提供对源模型数据筛选和排序的能力。基类使用时必须通过setSourceModel()方法指定其源模型然后调用QTreeView 的setModel()方法传入QSortFilterProxyModel这个中间模型而非传入源模型这样视图显示的数据就可以通过本中间模型进行排序和筛选而不影响到源模型中的数据。 运行截图 关键代码 #include DefMainWindow.h #include qgsattributetableview.h // 显示图层属性表的视图组件 #include qmessagebox.h // 弹出提示框DefMainWindow::DefMainWindow(QWidget *parent) :QMainWindow(parent),mCanvas(this) {ui.setupUi(this);ui.verticalLayout-addWidget(mCanvas);mpVectorLayer new QgsVectorLayer(E:\\TestImage\\中华人民共和国\\中华人民共和国.shp, 中华人民共和国);// 因为图层编码为utf8这里也需要设置编码为utf8mpVectorLayer-setProviderEncoding(utf-8);// 参数一为要缓存特征的图层参数二为缓存的大小,这里我们直接将缓存大小设定为要素数量即全部缓存mpVectorLayerCache new QgsVectorLayerCache(mpVectorLayer, mpVectorLayer-featureCount());// 创建源模型mpAttrTableModel new QgsAttributeTableModel(mpVectorLayerCache);// 在使用此模型作为任何其他中间模型的源模型之前将该图层加载到模型中mpAttrTableModel-loadLayer();// 创建中间模型用于制作属性表筛选器// 参数一为Canvas画布参数二为源模型// 筛选执行的过程中画布上同样要更新渲染只显示筛选后的要素mpAttrTableFilterModel new QgsAttributeTableFilterModel(mCanvas, mpAttrTableModel);// 为中间模型设置源模型由于上面创建中间模型的构造函数中已经设置了源模型所以此句可以忽略mpAttrTableFilterModel-setSourceModel(mpAttrTableModel);// 将图层加载到Canvas画布mCanvas.setLayers(QListQgsMapLayer*() mpVectorLayer);// 将画布缩放到完整范围用于显示完整图层mCanvas.zoomToFullExtent();QObject::connect(ui.btnOpenAttributeTable, QPushButton::clicked, this, DefMainWindow::onOpenAttributeTableButtonClicked);QObject::connect(ui.btnApplyWhereClause, QPushButton::clicked, this, DefMainWindow::onApplyWhereClauseButtonClicked); }// 点击“打开属性表”按钮弹出属性表窗口 void DefMainWindow::onOpenAttributeTableButtonClicked() {// 创建视图QgsAttributeTableView* pView new QgsAttributeTableView(this);// 该方法来自QWidget设置窗口为半模态类型pView-setWindowModality(Qt::WindowModality::WindowModal);// 设置窗口属性// Qt::Window 表示无论是否有父窗口部件新窗口部件都是一个窗口通常有一个窗口边框和一个标题栏pView-setWindowFlag(Qt::Window);// 设置窗口标题pView-setWindowTitle(u8图层属性表);// 设置模型 void QgsAttributeTableView::setModel(QgsAttributeTableFilterModel * filterModel) pView-setModel(mpAttrTableFilterModel);// 设置窗口大小pView-resize(700, 450);// 展示窗口pView-show(); }// 输入查询语句筛查属性值 void DefMainWindow::onApplyWhereClauseButtonClicked() {// 获取输入的查询语句QString whereClause ui.leWhereClause-text();// 设置的同时会进行查询如果查询出现错误则返回falseif (!mpVectorLayer-setSubsetString(whereClause)){// 如果有查询出现错误if (mpVectorLayer-dataProvider()-hasErrors()){// 显示记录的错误信息QMessageBox::warning(this, u8错误, QString(u8查询执行错误。返回信息\n\n%1).arg(mpVectorLayer-dataProvider()-errors().join(\n)));// 清除记录的错误信息mpVectorLayer-dataProvider()-clearErrors();}// 如果查询字符串设置失败而且没有错误说明设置过滤表达式失败else{QMessageBox::warning(this, u8错误, u8设置过滤表达式失败。);}} }查询功能详解 // 输入查询语句筛查属性值 void DefMainWindow::onApplyWhereClauseButtonClicked() {// 获取输入的查询语句QString whereClause ui.leWhereClause-text();// 设置的同时会进行查询如果查询出现错误则返回falseif (!mpVectorLayer-setSubsetString(whereClause)){// 如果有查询出现错误if (mpVectorLayer-dataProvider()-hasErrors()){// 显示记录的错误信息QMessageBox::warning(this, u8错误, QString(u8查询执行错误。返回信息\n\n%1).arg(mpVectorLayer-dataProvider()-errors().join(\n)));// 清除记录的错误信息mpVectorLayer-dataProvider()-clearErrors();}// 如果查询字符串设置失败而且没有错误说明设置过滤表达式失败else{QMessageBox::warning(this, u8错误, u8设置过滤表达式失败。);}} } 1bool QgsVectorLayer::setSubsetString(const QString  subset) subset可以是sql语句的where子句也可以是特定于底层数据提供程序和数据存储的其他定义字符串。如果设置subset字符串成功则返回true否则返回false。QgsVectorLayer::setSubsetString()方法会将用户输入的subset应用到图层上筛选子句被设置成功后会自动映射到以其为源的数据缓冲即之前建立的 QgsVectorLayerCache 对象上。相应的数据源模型也将得到更改进而中间模型也会改最终反映到 QgsAttributeTableView 的显示上。 2const QgsVectorDataProvider * QgsVectorLayer::dataProvider()const  以正确的方式返回该层的数据提供程序它可能是nullptr。在获取和处理图层错误信息时需要通过QgsVectorLayer::dataProvider()方法获取QgsVectorDataProvider 类。这个类是对一切矢量数据源类型的抽象类似于数据处理的中间件。 3bool QgsVectorDataProvider::hasErrors()const 查询出现错误会返回true 4QStringList QgsVectorDataProvider::errors()const 获取记录的错误信息 5void QgsVectorDataProvider::clearErrors() 清除记录的错误信息 注意查询时输入的待查询的字符串要用单引号 参考文章 文章页 | mriiirons blog
http://www.w-s-a.com/news/972428/

相关文章:

  • 做网站怎么那么难网站的建设与管理的心得体会
  • 黄冈网站建设哪家快些网站规划与建设评分标准
  • 建站平台 绑定域名怎么在手机上做网站
  • 做电影网站违法吗莱芜 网站
  • 品牌咨询公司泉州seo不到首页不扣费
  • 做网站做一个什么主题的怎样搭建一个企业网站
  • 做设计的有什么网站桂林论坛网站有哪些
  • 做的网站不能放视频开发公司春联
  • 重庆装修房子可以提取公积金吗长沙优化官网公司
  • 做外贸的网站都有哪些带后台的html网站源码
  • 厦门百度快速优化排名手机系统优化工具
  • 宁波网站制作公司推荐公司建站多少钱
  • 网络营销薪酬公司温州网站优化定制
  • 橙色在网站中的应用淘宝客绑定网站备案号
  • 杭州视频网站建设成都设计院排行
  • 慈溪建设网站盘丝洞app破解无限盘币
  • 关于服装店网站建设的策划方案seo关键词优化软件官网
  • 丰台高端网站建设土巴兔装修贵吗
  • 宽屏网站mysqli pdo wordpress
  • 2022年没封网站直接进入赣州网吧
  • 河南省建设厅证件证件查询网站硬件开发是什么意思
  • tp5做企业网站宿迁房产网租房信息
  • php高级网站开发wordpress不能添加文章
  • 小学校园网站建设付费阅读下载网站开发
  • 如何做招聘网站网站建设中 敬请期待
  • 雅安工程交易建设网站做vip电影网站
  • 网站建设方维网站标题title为什么不能频繁的改
  • 网站建设如何上传文件wordpress列表自定义数据表
  • 摄影课程自学网站科技项目的类型有
  • 未来最紧缺的十大专业长春seo顾问