python3的pyqt5 qtablewidget按数据大小排列_大小端模式说明

c08ca694351b07ca7a21739aeeca3aae.png

概述

在计算中,字节顺序是指数字的二进制表示内的字节(或有时是位)的顺序。它也可以更普遍地用于指代任何表示的内部排序,例如数字系统中的数字或日期的部分。

在最常见的用法中,字节顺序表示多字节数字内的字节顺序。小端排序将最低有效字节放在最前面,将最高有效字节置于最后,而大端排序则相反。例如,考虑无符号十六进制数0x1234,这需要至少两个字节来表示。在小端排序中,字节将被排列为[0x34,0x12],而在大端排序中它们将是[0x12,0x34]。

在内存中的形式

比如有 int 整型数,其值以十六进制表示为:0x12345678,那么在内存中的存储如下图所示:

aeeccad0d3a51cf482d513ed9c0115db.png

为什么有大小端

网上给出的描述是: 这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,例如,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

简单的来说,计算机早期硬件设计没有统一的规范,于是就出现了大小端不一致的硬件设计,而且各自发展的都很好,等到万物互联后,数据有了交互,大小端也就成了必须要考虑的问题了。

现状

目前Intel的80×86系列芯片是唯一还在坚持使用小端的芯片,ARM芯片默认采用小端,但可以切换为大端;而MIPS等芯片要么采用全部大端的方式储存,要么提供选项支持大端——可以在大小端之间切换。另外,对于大小端的处理也和编译器的实现有关,在C语言中,默认是小端(但在一些对于单片机的实现中却是基于大端,比如Keil 51C),Java是平台无关的,默认是大端。在网络上传输数据普遍采用的都是大端。

大小端注意场景

  1. 不同端模式的处理器进行数据传递时必须要考虑端模式的不同
  2. 注意 Java 和 C/C++ 语言开发的程序之间交互数据时大小端的转换
  3. 在网络上传输数据时,由于数据传输的两端对应不同的硬件平台,采用的存储字节顺序可能不一致。所以在TCP/IP协议规定了在网络上必须采用网络字节顺序,也就是大端模式。对于char型数据只占一个字节,无所谓大端和小端。而对于非char类型数据,必须在数据发送到网络上之前将其转换成大端模式。接收网络数据时按符合接受主机的环境接收。

参考

参考链接 https://en.wikipedia.org/wiki/Endianness

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用QHeaderView来实现QTableWidget表头筛选功能。具体步骤如下: 1. 创建QHeaderView对象,并将其设置为QTableWidget的水平表头。 2. 为QHeaderView的每个表头项设置一个过滤器,用于筛选该列的数据。 3. 在过滤器中,使用QSortFilterProxyModel来过滤数据,并将其设置为QTableWidget的模型。 4. 在过滤器中,根据用户输入的筛选条件,使用QRegExp来匹配数据。 5. 在过滤器中,根据匹配结果,使用QModelIndexList来获取需要显示的行,并将其设置为QSortFilterProxyModel的过滤结果。 6. 在过滤器中,使用QHeaderView的setFilterBoxesVisible方法来显示过滤器输入框。 7. 在过滤器中,使用QHeaderView的setFilterBoxStyle方法来设置过滤器输入框的样式。 8. 在过滤器中,使用QHeaderView的setFilterBoxToolTip方法来设置过滤器输入框的提示信息。 9. 在过滤器中,使用QHeaderView的filterBoxTextChanged信号来响应用户输入的筛选条件,并更新QSortFilterProxyModel的过滤结果。 10. 在过滤器中,使用QHeaderView的filterBoxClearButtonClicked信号来响应用户清空筛选条件的操作,并更新QSortFilterProxyModel的过滤结果。 以上就是使用QHeaderView来实现QTableWidget表头筛选功能的步骤。 ### 回答2: QTableWidgetPyQt5中用于创建表格视图的类之一,它可以通过设置行列、单元格数及其内容等属性来实现对表格视图的管理。在实际开发中,为了方便对大量数据进行分类检索,我们经常会涉及到表头筛选(也称为列头过滤),即在QTableWidget表头视图中添加一个下拉框或弹出窗口,用于选择需要显示的列。 QTableWidget表头筛选的基本实现方式是通过QComboBox来自定义表头菜单,并通过connect()方法和activated()信号实现菜单选中事件的响应,进而调用hideColumn()和showColumn()方法控制列的显示与隐藏。下面是一个简单的流程示意图: 1.创建QTableWidget对象; 2.设置表格的行数和列数; 3.通过setHorizontalHeaderLabels()方法设置表头标签; 4.通过setCellContent()方法设置表格单元的内容; 5.创建QComboBox对象,设置下拉框中的菜单项; 6.将QComboBox对象添加到表头视图中; 7.通过activated()信号设置菜单选中事件的响应函数; 8.在响应函数中调用hideColumn()和showColumn()方法实现列的隐藏和显示。 在实现表头筛选时,还需要注意以下几点: 1.筛选菜单对应列只需要在第一次打开筛选菜单时添加,后续打开不需要再重新添加; 2.在菜单选中事件的响应函数内,要先清空原有的筛选条件再应用新的筛选条件; 3.如果表格的数据是动态改变的,需要在数据更新时重新生成筛选菜单。 对于表头筛选的高级功能,可以考虑使用QHeaderView和QAbstractProxyModel等组件和类来实现。通过对这些类和组件的深入学习和实践,将可以更加精准、高效地实现表头筛选和数据处理等任务。 ### 回答3: PyQt5是一个Python编程语言的图形用户界面(GUI)开发框架,能够完美地与Qt5进行交互。其中,QTableWidget是用于显示二维表格数据的Qt5控件,能够方便地进行数据的编辑、排序和筛选。 PyQt5中,我们可以通过设置QTableWidget表头点击事件来实现表头筛选。具体可以采用以下的方式: 1. 首先,将表头点击信号连接到自定义的处理函数上,在这个处理函数中负责调用QTableWidget排序函数和刷新UI界面。 ``` self.tableWidget.horizontalHeader().sectionClicked.connect(self.sortTable) def sortTable(self, index): self.tableWidget.sortByColumn(index) self.tableWidget.update() ``` 2. 然后,我们可以通过前缀匹配的方式来实现基于表头的筛选功能。即在表格中输入一个字符串,然后只显示前缀匹配的行。 ``` # 在筛选框内输入字符串 filter_text = self.lineEdit.text().lower() # 遍历每一行,只显示前缀匹配的行 for row in range(self.tableWidget.rowCount()): if filter_text in str(self.tableWidget.item(row, 0).text().lower()): # 这里以第一列为例 self.tableWidget.setRowHidden(row, False) else: self.tableWidget.setRowHidden(row, True) ``` 通过以上方式,我们就可以实现基于表头的筛选功能了。需要注意的是,由于QTableWidget数据实际上是存放在QTableWidgetItem中的,所以在筛选时需要先将数据转换为字符串进行操作。另外,这里只是简单的实现了基于前缀匹配的筛选,实际上可以根据需要进行各种自定义筛选操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值