当前位置: 首页 > 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/376327/

相关文章:

  • 广州网站开发网络公司网站建设的书
  • php手机网站开发教程家政网站怎么做
  • 视频网站的建设预算通信科技网站设计
  • 糖果网站建设策划书淘宝客网站开源
  • 建站公司还有前途吗cf网站编程
  • 网站建设需求确认表建站工具 比较
  • 刚建设的网站多久能在百度查到考试系统 微网站是什么样的
  • 商城网站建设高端企业网站建设劣势
  • 网站建设征集通讯员的通知seo推广外包
  • 微信公众号微网站建设专业网站建设出售
  • 怎么用wordpress建立自己的网站加强校园网站建设
  • 用什么做网站后台的织梦网站怎么上传
  • 怎么获取网站数据做统计百度快照推广有效果吗
  • 淘宝领卷网站什么做制造网站开发
  • 如何做com的网站网站建设投标书模板
  • 郑州网络营销网站优化网站技术方案怎么写
  • 济南市住房和城乡建设局网站wordpress mnews主题
  • ios开发网站app网站建设企业有哪些方面
  • 网站主页 优帮云深圳代做网站后台
  • app 与网站网站建设要做什么
  • 厦门国外网站建设公司郑州核酸点推vip服务
  • 免费网线seo外链怎么做
  • 宽带技术网网站wordpress widget hook
  • 山西省住房和城乡建设厅网站报名wordpress添加标签插件
  • 网站怎么自己做外贸网站案例
  • 做网站的优势公司网站怎么做站外链接
  • 海城网站制作建设精准营销的营销方式
  • 北京短视频拍摄公司重庆网站seo推广公司
  • 广州免费推广网站建设4399网页游戏大全
  • 网站的构架与组成建站公司兴田德润