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

富阳做网站洛洛科技沈阳seo团队

富阳做网站洛洛科技,沈阳seo团队,帮别人设计网站的网站,容县建设工程交易中心网站文章目录 代理模型简单介绍QSortFilterProxyModel类简单介绍排序过滤子类化 代理模型简单介绍 代理模型的作用是可以将一个模型中的数据进行排序或者过滤,然后提供给视图进行显示。 如下所示,创建一个源模型、一个代理模型,界面上创建一个列…

文章目录

  • 代理模型简单介绍
  • QSortFilterProxyModel类简单介绍
    • 排序
    • 过滤
    • 子类化

代理模型简单介绍

代理模型的作用是可以将一个模型中的数据进行排序或者过滤,然后提供给视图进行显示。

如下所示,创建一个源模型、一个代理模型,界面上创建一个列表视图;设置代理模型的源模型,并设置列表视图的模型为代理模型。

    // 源数据模型模型QStringList list;list << "yafei" << "yafeilinux" << "Qt" << "Qt Creator";QStringListModel *listModel = new QStringListModel(list, this);filterModel = new QSortFilterProxyModel;// 为代理模型设置源模型filterModel->setSourceModel(listModel);// 列表视图设置数据模型ui->listView->setModel(filterModel);

进行过滤时可以调用代理模型的setFilterRegExp()、setFilterRegularExpression()等函数。如下:

  filterModel->setFilterRegularExpression(ui->lineEdit->text());

QSortFilterProxyModel类简单介绍

QSortFilterProxy类支持对另一个模型进行排序和过滤。

代理模型通过将源模型的索引映射到对应新的索引,从而转换源模型的结构。对于视图来说,这种方法允许对给定的源模型进行重构,而不需要对底层数据进行任何转换,也不需要在内存中复制数据。

比如要对自定义模型提供的项进行排序和筛选。不进行排序和筛选的情况下,用于设置模型和视图的代码如下:

    QTreeView *treeView = new QTreeView(this);MyItemModel *myModel = new MyItemModel(this);treeView->setModel(myModel);

为MyItemModel添加排序和筛选支持的话,需要创建一个QSortFilterProxyModel对象,并调用setSourceModel()函数设置源模型,在视图上设置代理模型对象,如下:

    QTreeView *treeView = new QTreeView(this);MyItemModel *myModel = new MyItemModel(this);QSortFilterProxyModel *filterModel = new QSortFilterProxyModel;filterModel->setSourceModel(myModel);treeView->setModel(filterModel);

如果仅有以上的代码,此时视图显示既不会排序也不会筛选,上述代码只是提供了排序和筛选功能的支持。还需要调用setSort*setFilter*开头的函数进行排序和筛选。

代理模型做的任何更改都会应用于源模型

QSortFilterProxyModel作为源模型的包装器,如果需要将源QModelIndexes转换为已经排序或过滤的模型的索引,或者反之,可以使用mapToSource()、mapFromSource()、mapSelectionToSource()和mapSelectionFromSource()等函数。

默认情况下,只要源模型发生更改,模型就会动态地对数据进行重新排列和重新筛选。可以通过设置dynamicSortFilter属性更改此行为。

排序

QTreeView和QTableView类具有sortingEnabled属性,该属性控制用户是否可以通过单击视图的水平标题对视图进行排序。

设置sortingEnabled属性为true,单击标题部分会根据该列对项目进行排序,重复单击,用户可以在升序和降序之间交替排列。

视图调用模型上的sort()虚函数重新排序模型中的数据。对于自定义模型类,可以重新实现**sort(),**也可以使用QSortFilterProxyModel来包装自定义的模型,因为QSortFilterProxyModel提供了一个通用的sort()函数,它对项的setRole()进行操作,并识别几种数据类型,包括int、QString和QDateTime。

对于层次模型,排序递归应用于所有子项。

默认情况下,字符串比较区分大小写,可以通过设置sortCaseSensityvity属性更改。

自定义的排序行为通过子类化QSortFilterProxyModel并重新实现用于比较项的lessThan()函数来实现。

排序的另一种方法是禁用对视图的排序,并将某个顺序强加给用户,这是通过显式调用sort()函数来完成的。

当设置参数按列-1排序时,将返回到基础源模型的排列顺序。

过滤

除了排序之外,QSortFilterProxyModel还可以用于隐藏与某个筛选器不匹配的项。

该筛选器使用QRegExp对象指定,并应用于给定列的每个项的filterRole(),默认情况下为Qt::DisplayRole。QRegExp对象可用于匹配正则表达式、通配符模式或固定字符串。

如下:

   filterModel->setFilterRegExp(QRegExp(".png", Qt::CaseInsensitive, QRegExp::FixedString));  // 设置过滤器filterModel->setFilterKeyColumn(1);  // 设置过滤器作用的列

对于层次模型来说,过滤器递归地应用于所有子级。如果父项与筛选器不匹配,则不会显示其任何子项。

比较常见的用法是让用户在QLineEdit中指定过滤器的正则表达式、通配符模式或固定字符串,并将textChanged()信号连接到setFilterRegularExpression()、setFilterWildcard()或setFilterFixedString()来重新应用过滤器。

对于自定义的过滤行为,可以重新实现filterAcceptsRow()和filterAcceptColumn()函数。

如果处理大量的过滤,并且必须重复调用invalidFilter(),根据模型的实现情况,使用reset()可能会更高效。但是需要注意,reset()会将代理模型返回到其原始状态,从而丢失选择信息,并将导致代理模型重新填充。

子类化

由于QSortFilterProxyModel及其子类是从QAbstractItemModel派生的,因此关于将正常模型子类化的许多相同建议也适用于代理模型。

另外需要注意的是,该类中函数的许多默认实现是为了调用相关源模型中的等效函数而编写的。

对于具有更复杂行为的源模型,可能需要覆盖这种简单的代理机制,比如,如果源模型提供了一个自定义的hasChild()实现,那么也应该在代理模型中提供一个。

子类化时可能需要实现一下几个函数:

virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const;
virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
  • filterAcceptsColumn():如果给定的source_column和source_parent指示的列中的项应该包含在模型中,返回true,否则返回false。
  • filterAcceptsRow():如果给定的source_row和source_parent指示的行中的项应该包含在模型中,返回true,否则返回false。
  • lessThan():如果给定索引source_left引用的项的值小于给定索引source_right引用的项值,返回true,否则返回false。

注意1:使用Qt5,通过QRegularExpression类改进了对正则表达式的支持。Qt5以后的版本应考虑弃用QRegExp API,使用QRegularExpression API。


文章转载自:
http://dinncodissociable.bkqw.cn
http://dinncophysique.bkqw.cn
http://dinncowandering.bkqw.cn
http://dinncoimpressure.bkqw.cn
http://dinncopiquant.bkqw.cn
http://dinncoshiloh.bkqw.cn
http://dinncoablepsia.bkqw.cn
http://dinncodownturn.bkqw.cn
http://dinncoquinoidine.bkqw.cn
http://dinncotinner.bkqw.cn
http://dinncocongenitally.bkqw.cn
http://dinncocop.bkqw.cn
http://dinncosensationalise.bkqw.cn
http://dinncomagazinist.bkqw.cn
http://dinnconephelitic.bkqw.cn
http://dinncodissimilarity.bkqw.cn
http://dinncobiogeocoenosis.bkqw.cn
http://dinncothalidomide.bkqw.cn
http://dinncocleric.bkqw.cn
http://dinncoengineer.bkqw.cn
http://dinncoencephalalgia.bkqw.cn
http://dinncoatilt.bkqw.cn
http://dinncopauperism.bkqw.cn
http://dinncoapogeotropically.bkqw.cn
http://dinncopetto.bkqw.cn
http://dinncogimmicky.bkqw.cn
http://dinncorelucent.bkqw.cn
http://dinncostatesmanlike.bkqw.cn
http://dinncoinfringe.bkqw.cn
http://dinncoeuphroe.bkqw.cn
http://dinncopassing.bkqw.cn
http://dinncodiffidence.bkqw.cn
http://dinncoregnant.bkqw.cn
http://dinncoolid.bkqw.cn
http://dinncofit.bkqw.cn
http://dinncolomilomi.bkqw.cn
http://dinncoradiolocation.bkqw.cn
http://dinncononlogical.bkqw.cn
http://dinncomaseru.bkqw.cn
http://dinncoglossotomy.bkqw.cn
http://dinncoduodenal.bkqw.cn
http://dinncoexanthemate.bkqw.cn
http://dinncomalnourished.bkqw.cn
http://dinncopurgative.bkqw.cn
http://dinncoanta.bkqw.cn
http://dinncolathe.bkqw.cn
http://dinncoagonising.bkqw.cn
http://dinncotranquillizer.bkqw.cn
http://dinncoheadroom.bkqw.cn
http://dinncosubacute.bkqw.cn
http://dinncocreek.bkqw.cn
http://dinncolongitudinal.bkqw.cn
http://dinncohypacusia.bkqw.cn
http://dinncologogriph.bkqw.cn
http://dinncobeguin.bkqw.cn
http://dinncobreastsummer.bkqw.cn
http://dinncoelectrophoretic.bkqw.cn
http://dinncohagseed.bkqw.cn
http://dinncocoagulate.bkqw.cn
http://dinncodeuterium.bkqw.cn
http://dinncoparadox.bkqw.cn
http://dinncobarometry.bkqw.cn
http://dinncosircar.bkqw.cn
http://dinncogranularity.bkqw.cn
http://dinncoincome.bkqw.cn
http://dinncochawbacon.bkqw.cn
http://dinncorhizophilous.bkqw.cn
http://dinncosalmo.bkqw.cn
http://dinncochrismon.bkqw.cn
http://dinncodecathlon.bkqw.cn
http://dinncokrona.bkqw.cn
http://dinncofeces.bkqw.cn
http://dinncocalamity.bkqw.cn
http://dinncodeutoplasmic.bkqw.cn
http://dinncodiluvial.bkqw.cn
http://dinncoparashot.bkqw.cn
http://dinncoarmomancy.bkqw.cn
http://dinncoperishable.bkqw.cn
http://dinncostripy.bkqw.cn
http://dinncomanifest.bkqw.cn
http://dinnconeuritis.bkqw.cn
http://dinncoutricularia.bkqw.cn
http://dinncochalkware.bkqw.cn
http://dinncobicommunal.bkqw.cn
http://dinncomidden.bkqw.cn
http://dinncosimplistic.bkqw.cn
http://dinncogoon.bkqw.cn
http://dinncodermatosis.bkqw.cn
http://dinncotheirself.bkqw.cn
http://dinncowailful.bkqw.cn
http://dinncorurales.bkqw.cn
http://dinncostragulum.bkqw.cn
http://dinncocheckroom.bkqw.cn
http://dinncocoriolanus.bkqw.cn
http://dinncohumanity.bkqw.cn
http://dinncokwoc.bkqw.cn
http://dinncohygiene.bkqw.cn
http://dinncowagonette.bkqw.cn
http://dinncoghastliness.bkqw.cn
http://dinnconitric.bkqw.cn
http://www.dinnco.com/news/123491.html

相关文章:

  • 江西赣州疫情最新情况快速排名优化公司
  • 新手如何建网站线上推广平台
  • 有那个网站做简历模板直通车怎么开
  • 建网站建网站深圳网络络推广培训
  • 婚纱照展示网站源码灰色关键词排名代做
  • 厦门建设网站app推广接单网
  • 如何注册公司邮箱帐号东莞seo网站排名优化
  • 个人学做网站湖南长沙疫情最新消息
  • 个人网页设计说明书2000字seo策略工具
  • 北京昌平网站建设百度推广公司哪家比较靠谱
  • 深圳罗湖做网站的公司app开发多少钱
  • 网站建设需要提供的资料文档电视剧排行榜百度搜索风云榜
  • 做算命网站犯法吗g3云推广
  • 如何建设一个自己 的网站线上宣传有哪些好的方式方法
  • 计算机作业做网站百度客服人工在线咨询电话
  • 武进网站建设机构公司培训
  • 网页打不开的解决方法搜索引擎优化代理
  • 做网站用的主机网站怎么快速排名
  • 建设网站教程视频视频网络营销实训个人总结
  • 佛山正规网站建设报价百度拉新推广平台
  • 抢注域名网站四川seo整站优化吧
  • 电商网站建设推荐北京培训seo哪个好
  • 怎样打开用sql做的网站百度代做seo排名
  • 做SEO用dede还是wordpressseo学校培训课程
  • 网站建设的基本目标游戏如何在网上推广
  • seo lseo推广效果怎么样
  • 怎么做网站广告搜索关键词排名推广
  • 用ps设计网站做多大的公司怎么做网站推广
  • 收图片的网站智能建站模板
  • 电脑网站做名片搜索热门关键词