PyQt(Python+Qt)学习随笔:model/view架构中的排序和代理模型QSortFilterProxyModel

Qt QTableView自定义代理进阶(二) "我是按键" });} //paint函数是const类型的函数,不能改变成员变量的值,但能改变mutable修饰的成员变量的值 void ButtonDelegate :: paint(QPainter * painter , const QStyleOptionViewItem & option , const QModelIndex & index) const { 阅读详情

一、概述

在Model/View体系架构中,有两种方法可以进行排序;选择哪种方法取决于底层模型。

  • 如果模型是可排序的,即模型类实现了QAbstractItemModel.sort()函数,如QTableView和QTreeView都提供一个API,允许以编程方式对模型数据进行排序。此外,还可以通过将QHeaderView.sortIndicatorChanged()信号连接到QTableView .sortByColumn()槽函数或QTreeView.sortByColumn()槽函数来启用交互式排序(即允许用户通过单击视图的标题对数据进行排序)。
  • 另一种方法是,如果模型没有所需的接口,或者想使用列表视图(list View)来显示数据,则在视图中显示数据之前,使用代理模型来转换模型的结构。

二、代理模型

2.1、概述

在Model/View框架中,单个模型提供的数据项可以由任意数量的视图共享,并且每个视图可能以完全不同的方式表示相同的信息。自定义视图和代理是为同一数据提供完全不同展示结果的有效方法。但应用程序通常需要为相同数据的已处理版本提供常规视图,例如为列表数据提供不同排序的展现视图。

尽管将排序和筛选操作作为视图的内部方法来执行看起来可行,但是排序和筛选操作代价高,如果存在多个视图展示相同的数据时,每个视图数据排序按不同方式排序,如果每个视图实现类似的方法,这种操作代价高昂。

另一种方法就是在模型本身对数据进行排序,这导致每个视图都必须显示根据最近的排序或刷选操作处理后的数据项,同样代价高。

为了解决这个问题,Model/View框架使用代理模型来管理在各个模型和视图之间交互的信息。代理模型是一些组件,从视图的角度来看,它们的行为类似于普通Model,并代表该视图访问源模型中的数据。Model/View框架使用的信号和槽机制确保无论在其自身和源模型之间放置了多少代理模型,每个视图都会得到适当的更新。

老猿理解代理模型就是提供在其他的model和view之间排序和过滤数据的支持功能使用的的,在代理模型中可以对项进行排序和筛选,这种方法允许一个model采用和其视图功能匹配的要求重新组织,但不需要在数据和源模型上做任何处理,也不需要复制内存中的数据,可以有效提高效率。

2.2、使用代理模型

代理模型可以插入到现有模型和任意数量的视图之间。PyQt和Qt提供了一个标准的代理模型QSortFilterProxyModel,它通常是直接实例化和使用的,但也可以从其派生子类来提供自定义的筛选和排序行为。

QSortFilterProxyModel类可以按以下方式使用:

1. 定义代理模型对象
  语法:proxyModel = QSortFilterProxyModel((QObject parent)
2. 设置代理模型的数据源模型
语法:代理模型.setSourceModel(数据源模型)

其中代理模型就是第一步定义的模型,数据源模型即前面第三部分介绍的Model,为真正访问数据的模型。

3. 设置视图对应模型为代理模型
语法:视图.setModel(proxyModel )

2.3、代理模型小结

从以上语法看到,代理模型本身对外是个Model,但自身的数据源也是个Model。
由于代理模型继承自QAbstractItemModel,因此它们可以连接到任何类型的视图,并且可以在视图之间共享。它们还可用于从其他代理模型获得信息,类似代理模型到数据Model之间象管道一样排列使用。

QSortFilterProxyModel类被设计为实例化并直接在应用程序中使用,也可以通过特殊派生的子类实现所需的比较操作,从而创建更专门的代理模型。

QSortFilterProxyModel的具体过滤和刷选的方法请参考类相关的方法介绍,在此不进行展开说明。

老猿Python,跟老猿学Python!

PyQt5桌面GUI开发:从信号槽到多线程的Python跨平台实践 桌面GUI开发是软件工程中的重要领域,它涉及创建用户可直接交互的图形界面应用程序。其核心原理在于事件驱动编程模型,通过响应用户输入和系统事件来更新界面状态。在技术价值层面,优秀的GUI框架能显著提升开发效率、增强应用稳定性和跨平台兼容性。Python作为主流编程语言,在数据分析、机器学习等领域广泛应用,而PyQt5正是连接Python生态与专业级桌面开发的关键桥梁。它基于成熟的Qt框架,通过信号与槽机制实现松耦合通信,支持模型/视图架构处理大数据展示,并提供了QThread解决方案来避免界面卡顿。这些特性使 阅读详情

相关推荐

Qt for Python开发指南:从PySide6入门到应用打包部署

桌面应用开发是软件开发中的重要领域,它涉及创建运行在用户本地计算机上的图形界面程序。其核心原理是通过GUI框架构建用户界面,处理事件循环以实现交互响应。在Python生态中,GUI开发的价值在于能够利用Python的简洁语法和丰富库资源快速构建跨平台应用。PySide6作为Qt官方Python绑定,采用LGPL协议解决了商业授权问题,为开发者提供了强大的Qt6框架能力。通过信号与槽机制实现对象间通信,结合多线程处理防止界面卡顿,开发者可以构建专业级桌面应用。本文以构建文本编辑器为例,详细解析PySide6模

weixin_34195546的博客 392

QT教程:QSortFilterProxyModel代理实现自定义排序、联合过滤

QT教程:QSortFilterProxyModel代理实现自定义排序、联合过滤

m0_60259116的博客 2840

PyQt学习笔记:排序和代理模型

在本例中,我们过滤出只有第一列数据中包含数字 1 的行。而在对数据进行排序和过滤时,则需要用到代理模型 QSortFilterProxyModel。本篇文章将介绍如何使用 QSortFilterProxyModel 对表格中的数据进行排序和过滤,同时提供代码示例。这时就需要用到 QSortFilterProxyModel,它可以根据条件对数据进行排序和过滤。以上代码创建了一个 4 行 3 列的数据模型,并使用 QSortFilterProxyModel 对第二列的数据进行了升序排序。

BUG?不存在的! 495

第15.22节 PyQt(Python+Qt)入门学习:Model/View架构详解

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、简介 在PyQt和Qt中,Model/View架构是图形界面开发时用于管理数据和界面展现方式的关系。由该体系架构引入的功能分离使得开发人员能够更灵活地定制展现数据项的呈现方式,并提供标准模型接口支持广泛的数据源与预定义好的项视图(item views)一起使用。 二、Model/View架构...

老猿Python 3777

PyQt学习笔记:在Model/View架构中使用排序和代理模型

在MainWindow的构造函数中,我们创建了一个QSortFilterProxyModel实例,并通过setSourceModel()方法将TableModel设置为其源模型。在构造函数中,我们接受数据和表头作为参数,并将其保存在类的成员变量中。QSortFilterProxyModel是Qt提供的一个方便的类,它可以作为模型类和视图类之间的代理,用于对数据进行排序和过滤。在这个示例中,我们将创建一个简单的TableModel类,用于展示一些学生的信息,包括姓名、年龄和分数。

code88888的博客 237

LAMMPS实战:如何用ReaxFF力场模拟碳氢化合物热解(附完整脚本)

本文提供了一份使用LAMMPS软件中ReaxFF反应力场模拟碳氢化合物热解过程的完整实战指南。内容涵盖从环境准备、力场参数选择、能量最小化,到升温恒温动力学模拟的完整脚本编写,并介绍了基于轨迹文件的产物分析方法,帮助计算化学与材料科学研究者快速上手这一关键的分子动力学仿真技术。

soda5的博客 1099

Qt Model/View 编程深度解析报告

本文介绍了Qt框架中的Model/View架构,该架构通过分离数据与视图解决了传统GUI开发中的数据冗余和同步问题。文章首先分析了传统基于项控件的局限性,指出其数据耦合导致的维护成本上升。随后阐述了Model/View对MVC模式的改进,合并视图和控制器角色并引入委托机制,形成了Model/View/Delegate范式。 核心内容围绕三大组件展开: 模型作为数据抽象层,通过QAbstractItemModel标准接口统一访问各类数据源,提供QAbstractListModel和QAbstractTable

greenspan的专栏 2180

扣子(Coze)实战:自动化拆解抖音对标账号,输出完整报告(附源码下载)

本文要分享的工作流,可以实现对标账号的拆解与分析,最后输出一份完整的分析报告,报告中包含有账号基本信息、账号定位、人设设计、选题方向、内容结构、变现路径以及优化建议等。

MCC_MCC_MCC的博客 2827

PyQt5桌面应用开发实战:浏览器多开软件列表显示设置功能实现

在桌面应用开发中,数据展示与用户交互是核心环节。通过模型-视图-控制器(MVC)架构,开发者可以将数据逻辑与界面呈现分离,实现灵活可控的界面管理。其技术价值在于提升应用的专业性和用户体验,尤其在需要管理大量并行任务或数据条目的场景下,如自动化测试、多账号操作或系统监控工具。本文以Python PyQt5框架为基础,结合数据绑定与JSON配置持久化,详细解析了如何为自制浏览器多开软件实现可自定义的列表显示设置功能,涵盖列定义、排序规则与视图样式的动态配置,为构建可配置化GUI应用提供了完整的实战方案。

weixin_30751947的博客 377

【加密社】私钥碰撞器,秒杀市面上的碰撞器

基于上述的逻辑和代码,开发了ETH挖掘器(图1.1)这里有个亮点是:1.很多开发者在判断地址是否有效的环节上,用的是查询余额,其实这是不对的,查询余额你可能只能查询对应代币的余额,例如usdt,eth等但是如果用查询交易次数就不一样了,你只要是交易过,我就认为是有效钱包,这样的速度比查询余额要快,也要更准确。2.rpc节点可配置。

加密社的博客 1581

CentOS7.9 安装 ImageMagick,图片转换为HEIC图像格式

由于ImageMagick7以下不支持heic等图片格式,所以重新安装了ImageMagick7.1版本支持heic格式,在网上找了很多资料,归纳总结并写此文章记录一下。在Linux(CentOS7.9)上安装ImageMagick7.1.1-38。

shmily_i的博客 1940

基于Qt与C++构建跨平台网络流量监控工具:从抓包到可视化实战

网络流量监控是网络编程与系统运维中的基础而重要的技术,其核心在于捕获并分析流经网络接口的数据包。从原理上讲,它依赖于操作系统提供的底层接口(如libpcap/Npcap)或原始套接字,实现对以太网帧、IP、TCP/UDP等协议栈的逐层解析,从而提取源/目的地址、端口、协议类型及载荷大小等关键五元组信息。这项技术的工程价值在于,它能帮助开发者深入理解网络数据包的封装与传输过程,并为性能分析、安全监控和故障排查提供数据支撑。典型的应用场景包括实时监控本机或网络流量、分析应用程序的网络行为、排查异常连接等。本文将

diaohuyi6830的博客 344

C2000ware介绍

C2000的下载安装指南C2000目录。

小柚子的博客 2796

PyQt QListView+ComboBox联动实现搜索过滤与导航功能

在桌面应用开发中,数据展示与交互筛选是常见的工程需求。PyQt作为Python生态中成熟的GUI框架,提供了Model/View架构来分离数据与界面,QListView配合自定义模型可以高效实现列表展示。通过ComboBox与列表联动,结合搜索过滤技术,开发者能快速构建出结构清晰、响应流畅的管理工具界面。这种模式适用于设备管理、文件检索、订单核对等需在分类内逐条浏览数据的场景。文章围绕一套基于QListView和PyQt的筛选列表实现方案,深入讲解数据流设计、模型刷新及导航定位等关键环节,帮助读者掌握桌面端

weixin_34259232的博客 153

RK3568平台开发系列讲解(中断及异常篇)中断下半部:中断线程化

以前用 work 来线程化地处理中断,一个 worker 线程只能由一个 CPU 执行, 多个中断的 work 都由同一个 worker 线程来处理,在单 CPU 系统中也只能忍着 了。少数中断不能线程化,典型的例子是时钟中断,有些流氓进程不主动让出处理器,内核只能依靠周期性的时钟中断夺回处理器的控制权,时钟中断是调度器的脉搏。中断处理线程是优先级为50、调度策略是SCHED_FIFO的实时内核线程,名称是“irq/”后面跟着Linux中断号,线程处理函数是。,说明是线程化的中断,那么唤醒中断处理线程。

内核笔记 435

【Unity】网络游戏实战(序章)MMORPG大型多人在线角色扮演 + 中国象棋联网对战

本系列会基于两种常见的网络游戏类型(MMORPG大型多人在线角色扮演和多人棋牌),从零开始实现网络游戏开发中的大多数环节。【杜绝代码炫技】本系列杜绝代码炫技,摈弃那些高深的设计模式,一切业务逻辑的实现代码追求浅显易懂,即便是网络编程菜鸟,也能循序渐进掌握本系列的核心要点。【授之鱼也授之渔】与一些开源库那样只授予源码不同,本系列还会基于各个技术要点展开详解,并结合切实的可直接运行的Demo,授之鱼更授之渔。

神码编程 1963

QTableWidget表头排序实战:从原理到踩坑全解析

在桌面端表格开发中,数据展示与交互排序是绕不开的基础能力。QTableWidget作为Qt提供的高效表格组件,凭借其Item-Based的便捷封装,成为快速实现数据管理、报表系统等场景的首选。表头排序看似简单,实则涉及数据类型规划、比较规则定制、控件同步与性能优化等多个关键技术点。默认的字符串比较往往导致数字、日期列排序混乱,理解Qt排序执行链路并合理利用UserRole、自定义QTableWidgetItem等机制,才能实现真正可控的排序逻辑。同时,排序开启后带来的行号索引变化、下拉框错位等工程问题,也需

weixin_34267123的博客 363

Vue3 + uniapp 踩坑:iOS 真机调试一直报错Maximum call stack size exceeded,和(in promise)MiniProgramError err的解决方法

不是你写错代码,是微信开发工具和 iOS 真机调试的兼容问题。开个空项目都报错,勾个设置就没问题,不是你,是工具的锅。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1267

PyQt5桌面应用现代化改造实战:界面美化与性能优化指南

在桌面应用开发领域,Python与Qt的组合始终是高效且稳定的选择之一。随着用户对界面质感和交互体验的要求不断提高,如何基于PyQt5打造出具备现代感、流畅且易维护的应用,成了开发者普遍关心的问题。本文从Qt界面美化的基础概念入手,讲解QSS样式表、无边框窗口、信号与槽机制、耗时任务异步处理等核心原理,并延伸到数据展示、拖拽交互与PyInstaller打包等工程实践。无论你是想改造内部工具,还是构建对外发布的产品级桌面软件,都能从中获得一套可落地的技术路径,让PyQt5真正焕发出不输Web应用的生命力。

weixin_42628280的博客 186

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

字体管理工具开发指南:从字体解析到预览渲染的完整实现

字体作为数字内容创作的核心视觉元素,其管理与预览是设计师、开发者和内容创作者的基础需求。字体文件(如TTF、OTF)本质上是包含字形轮廓、字符映射和元数据的结构化数据包,通过解析其内部信息表(如name表、OS/2表、cmap表),可以获取字体家族、字重、字符集等关键属性。在工程实践中,利用成熟的库(如Python的fontTools)进行文件解析,结合GUI框架(如PyQt)实现渲染预览,能高效构建本地字体管理工具。这类工具的核心技术价值在于解决了操作系统原生字体管理功能的不足,实现了批量预览、智能筛选、

weixin_33847182的博客 408

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

QSortFilterProxyModel实现排序、过滤

使用QRegExp对象指定筛选器,并将筛选器应用于给定列的每个项的filterRole() (默认情况下为Qt::DisplayRole)。以实现"只要第一列有整数或者第三列有整数的都显示出来"为例,首先需要子类化QSortFilterProxyModel类,然后重写filterAcceptsRow()或者filterAcceptsColumn()函数.由于我们筛选第一列和第三列,列号是明确的,而行号是未知的, 所以我们只重写filterAcceptsRow()函数.

wisdomroc的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

获取过滤数据

要获取并过滤数据,可以使用 Python 处理各种数据格式(如 JSON、CSV 等)。以下是一些示例,演示如何从文件中获取数据并根据特定条件进行过滤。

weixin_44617651的博客 464

Qt tips 之 浅谈 QTableView 使用 QSortFilterProxyModel 进行排序搜索时在某些业务场景下的问题

QTableView 使用 QSortFilterProxyModel 进行排序搜索时在某些业务场景下的问题

qq_41368848的博客 1628

【Qt编程之Widgets模块】-006:QSortFilterProxyModel代理的使用方法

使用过滤器需要指定一个数据模型(QStandardItemModel)作为数据源,并且该数据模型无需设置到表对象上;过滤器指定好数据源后设置到表对象上即可正常使用过滤器不指定过滤列时,默认过滤列为0列。

随意的风的专栏 2033

qt QSortFilterProxyModel详解

QSortFilterProxyModel是Qt框架中的一个重要类,它作为代理模型,能够在源模型(如QStandardItemModel、QSqlTableModel等)和视图(如QTableView、QTreeView等)之间提供排序和过滤的支持。QSortFilterProxyModel允许开发者对源模型的数据进行排序和过滤操作,而无需直接修改源模型本身,这极大地增强了数据展示的灵活性和用户的数据浏览体验。

ckg3824278的博客 805
上一篇: PyQt(Python+Qt)学习随笔:model/view架构中的QStandardItemModel使用案例
下一篇: PyQt(Python+Qt)学习随笔:model/view架构中的QStringListModel
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值