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

【QT】QTableView或QTableWidget 搭配QLineEdit实现数据的搜索显示

在 Qt 中,QTableViewQTableWidget 都可以用来实现数据的搜索和显示,但它们的适用场景和实现方式有所不同:

QTableView

  1. 适用场景QTableView 适用于更复杂的场景,尤其是当需要处理大量数据或需要高度定制化的表格时。它是基于模型/视图(Model/View)架构的,这意味着你可以将任何实现了 QAbstractItemModel 接口的模型作为数据源。

  2. 实现搜索显示

    • 你可以通过设置一个过滤器模型(例如,QSortFilterProxyModel)来实现搜索功能。
    • 过滤器模型可以放置在实际数据模型和 QTableView 之间。
    • 当用户在搜索框中输入文本时,你可以设置过滤器模型的过滤条件,这样 QTableView 就只显示匹配的行。

QTableWidget

  1. 适用场景QTableWidgetQTableView 的一个子类,提供了一个基于项目的接口,适用于更简单的用例,如处理不大的数据集或不需要自定义模型的场景。

  2. 实现搜索显示

    • QTableWidget 没有内置的过滤支持,但可以手动实现搜索功能。
    • 实现搜索时,需要遍历所有的行和列,检查每个项目(QTableWidgetItem)是否符合搜索条件。
    • 符合条件的行可以保持可见,不符合条件的行可以通过隐藏来实现过滤效果。

总结

  • 如果需要处理的数据量较大,或者需要高度定制化的表格(例如,不同类型的数据,复杂的渲染逻辑等),QTableView 配合自定义模型和过滤器模型是更合适的选择。
  • 如果你的需求相对简单,数据量不大,QTableWidget 通过手动过滤可能就足够了。

在任何情况下,实现搜索功能通常涉及到监听搜索框的输入变化(例如使用 QLineEdit),然后根据输入的内容更新表格的显示。在 QTableView 的情况下,这通常意味着设置过滤器模型的过滤规则;而在 QTableWidget 的情况下,则可能需要遍历表格项并手动隐藏或显示行。

实现

以下是分别使用 QTableViewQTableWidget 实现简单搜索功能的示例代码。

1. QTableView 示例

首先,使用 QTableView 配合 QSortFilterProxyModel 实现搜索功能。假设我们有一个简单的模型,例如一个字符串列表。

#include <QtWidgets>
#include <QSortFilterProxyModel>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建数据模型QStringListModel model;model.setStringList(QStringList() << "Apple" << "Banana" << "Cherry" << "Date");// 创建过滤器模型并设置数据模型QSortFilterProxyModel proxyModel;proxyModel.setSourceModel(&model);// 创建视图和搜索框QLineEdit searchBox;QTableView tableView;// 设置模型tableView.setModel(&proxyModel);// 搜索框过滤逻辑QObject::connect(&searchBox, &QLineEdit::textChanged, [&](const QString &text){proxyModel.setFilterRegExp(QRegExp(text, Qt::CaseInsensitive, QRegExp::FixedString));});// 窗口布局QVBoxLayout *layout = new QVBoxLayout;layout->addWidget(&searchBox);layout->addWidget(&tableView);// 显示窗口QWidget window;window.setLayout(layout);window.show();return app.exec();
}

在这个示例中,我们使用 QStringListModel 作为基础数据模型,并通过 QSortFilterProxyModel 对数据进行过滤。用户在 QLineEdit 中输入文本时,会触发过滤逻辑,更新 QTableView 中显示的数据。

2. QTableWidget 示例

对于 QTableWidget,我们需要手动实现搜索功能,通常是遍历所有行,根据搜索条件显示或隐藏行。

#include <QtWidgets>int main(int argc, char *argv[]) {QApplication app(argc, argv);QLineEdit searchBox;QTableWidget tableWidget(4, 1); // 4行1列QStringList list = QStringList() << "Apple" << "Banana" << "Cherry" << "Date";for (int i = 0; i < list.size(); ++i) {QTableWidgetItem *item = new QTableWidgetItem(list.at(i));tableWidget.setItem(i, 0, item);}QObject::connect(&searchBox, &QLineEdit::textChanged, [&](const QString &text){for (int i = 0; i < tableWidget.rowCount(); ++i) {bool match = tableWidget.item(i, 0)->text().contains(text, Qt::CaseInsensitive);tableWidget.setRowHidden(i, !match);}});QVBoxLayout *layout = new QVBoxLayout;layout->addWidget(&searchBox);layout->addWidget(&tableWidget);QWidget window;window.setLayout(layout);window.show();return app.exec();
}

在这个例子中,使用 QTableWidget 创建了一个简单的表格,并使用 QLineEdit 作为搜索框。当用户在搜索框中输入时,我们遍历表格的每一行,根据用户的输入来决定是否隐藏该行。

这两个例子都展示了如何结合 Qt 控件实现搜索功能,但请注意,这些代码只是简单的示例,可能需要根据具体需求进行调整和优化。

相关文章:

【QT】QTableView或QTableWidget 搭配QLineEdit实现数据的搜索显示

在 Qt 中&#xff0c;QTableView 和 QTableWidget 都可以用来实现数据的搜索和显示&#xff0c;但它们的适用场景和实现方式有所不同&#xff1a; QTableView 适用场景&#xff1a;QTableView 适用于更复杂的场景&#xff0c;尤其是当需要处理大量数据或需要高度定制化的表格时…...

Apache Flink连载(三十五):Flink基于Kubernetes部署(5)-Kubernetes 集群搭建-1

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 ​编辑...

快速幂(c++题解)

题目描述 我们通常把a的b次方记作a^b&#xff0c;为了方便&#xff0c;我们经常直接使用C内置函数pow(a,b)来完成这个工作&#xff0c;但a的b次方就是把a垒乘b次&#xff0c;时间复杂度为O(b)&#xff0c;当b值很大时&#xff0c;将会耗去大量时间&#xff0c;所以请同学们不能…...

C#单向链表实现:Append,Move,Delete,InsertAscending, InsertUnAscending,Clear

目录 一、链表定义 二、链表设计 1.先定义一个结点类&#xff08;Node&#xff09; 2.再定义链表类&#xff08;LinkedList&#xff09;并依次设计其方法 3.再实现删除方法 4.再实现Insert 的方法 5.再增加InsertAscending升序插入 6.再增加 InsertUnAscending 的方法…...

python基础-基本数据类型深入-2.1

目录 元组 什么是元组&#xff08;tuple&#xff09; 元组练习-1 元组的基本操作 元组常用内建函数 列表和元组的区别与总结 元组练习-2 元组练习-3 元组 什么是元组&#xff08;tuple&#xff09; 与列表&#xff08;list&#xff09;一样&#xff0c;元组&#xff0…...

Android LiveData Cannot add the same observer with different lifecycles

https://www.yxhuang.com/2022/05/29/livedata-add-some-observer-error/ 这篇文章已经解释的很好了。 其实在去年我写的文章&#xff0c; https://blog.csdn.net/jzlhll123/article/details/126593235 中提到了&#xff0c; 其实不论是java或者kotlin&#xff0c;不引用外部的…...

MongoDB聚合运算符:$cmp

文章目录 语法用法举例 $cmp聚合运算符返回连个值的比较结果。 语法 { $cmp: [ <expression1>, <expression2> ] }表达式可以是任何类型&#xff0c;使用标准的BSON比较顺序对不同类型的值进行比较。 用法 $cmp对两个值进行比较&#xff0c;返回&#xff1a; …...

【C++基础知识详细记录】

一、基础知识 C基础知识点的汇总涵盖了许多方面&#xff0c;包括但不限于以下内容&#xff1a; 1. 常量定义 使用#define宏定义常量&#xff1a; #define PI 3.14159265358979323846 // 宏定义一个浮点型常量PI使用const关键字定义常量&#xff1a; const int MAX_SIZE 100;…...

Socket网络编程(五)——TCP数据发送与接收并行

目录 主要实现需求TCP 服务端收发并行重构启动main方法重构重构分离收发消息的操作重构接收消息的操作重构发送消息TCPServer调用发送消息的逻辑监听客户端链接逻辑重构Socket、流的退出与关闭 TCP 客户端收发并行重构客户端 main函数重构客户端接收消息重构客户端发送消息重构…...

2024最新-ubuntu22.04安装最新版QT6.6~6.8教程

​ 1. 在官网下载 online_installer&#xff1a; https://download.qt.io/archive/online_installers/4.7/qt-unified-linux-x64-4.7.0-online.run 或者直接镜像站下载&#xff1a; http://mirrors.ustc.edu.cn/qtproject/archive/online_installers/4.7/qt-unified-linux-x6…...

STM32------分析GPIO寄存器

一、初始LED原理图 共阴极led LED发光二极管&#xff0c;需要有电流通过才能点亮&#xff0c;当有电压差就会产生电流 二极管两端的电压差超过2.7v就会有电流通过 电阻的作用 由于公式IV/R 不加电阻容易造成瞬间电流无穷大 发光二极管工作电流为10-20MA 3.3v / 1kΩ 3.…...

数学实验-Matlab使用(1)

使用方法以及笔记均在文件中 class1_func1.m function f class1_func1(x) % f为输出&#xff0c;输出有多个时需要用中括号以矩阵的方式包起来 % x为输入f sin(x)class1_func2.m function [a,b,u,v] class1_func2(x,y)[a,b] eig(x)[u,v] eig(y)class1.m % 当语句后有…...

kafka文件存储机制和消费者

1.broker文件存储机制 去查看真正的存储文件&#xff1a; 在/opt/module/kafka/datas/ 路径下 kafka-run-class.sh kafka.tools.DumpLogSegments --files ./00000000000000000000.index 如果是6415那么这个会存储在563的log文件之中&#xff0c;因为介于6410和10090之间。 2.…...

《汇编语言》- 读书笔记 - 第15章-外中断

《汇编语言》- 读书笔记 - 第15章-外中断 15.1 接口芯片和端口15.2 外中断信息1. 可屏蔽中断&#xff08;Maskable Interrupt&#xff09;2. 不可屏蔽中断&#xff08;Non-Maskable Interrupt&#xff09;设计思想 15.3 PC 机键盘的处理过程1. 键盘输入2. 引发 9 号中断3. 执行…...

【Vue3】CSS 新特性

:slotted <template> <!-- App.vue--><Son ><div class"a">我要插入了</div></Son> </template><script setup lang"ts"> import Son from ./components/Son.vue </script><style></sty…...

四信水电站泄洪预警方案,精准提升防汛应急水平

2022年5月水利部办公厅发布《关于开展水库泄洪设施专项排查整改的紧急通知》&#xff0c;为坚决贯彻落实关于水库大坝安全的重要指示批示精神、关于保障水库泄洪通道通畅的批示要求&#xff0c;全力防范水库可能出现的重大险情&#xff0c;确保水库安全度汛。 2023年3月国家能源…...

k8s中容器的调度与创建:CRI,cgroup

container调度与创建 选自&#xff1a;K8s、CRI与container - packy的文章 - 知乎 https://zhuanlan.zhihu.com/p/102897620 Cgroup创建&#xff1a; cgexec -g cpu,memory:$UUID \ > unshare -uinpUrf --mount-proc \ > sh -c "/bin/hostname $UUID &…...

Unity安装与简单设置

安装网址&#xff1a;https://unity.cn 设置语言&#xff1a; 设置安装位置&#xff1a;否则C盘就会爆了 获取一个个人的资格证&#xff1a; 开始安装&#xff1a; 安装完毕。 添加模块&#xff1a;例如简体中文 新建项目&#xff1a; 布局2*3、单栏布局、 设置…...

数据库的介绍、分类、作用和特点

数据库是用来存储、管理和检索数据的集合系统。根据数据处理模型的不同&#xff0c;数据库可以分为多种类型&#xff0c;主要包括&#xff1a; 1、关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; 介绍&#xff1a;关系型数据库使用表格形式来存储数据&#xff0c;并通…...

【Unity】机器人末端执行器仿真

机械手臂的末端执行器使用多项式来计算转动角度可能有几个原因&#xff1a; 精确控制&#xff1a;机械臂的运动通常需要高度的精确性&#xff0c;特别是在精密工作或复杂运动轨迹的情况下。多项式&#xff0c;特别是高阶的&#xff0c;可以很好地近似复杂的非线性关系和运动轨迹…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...