QTableWidget表格部件中行高和列宽的计算在Qt提供的资料中内容介绍比较泛,细节说得不清楚,为此老猿花了整整2天时间进行反复摸索,最终将行高和列宽的计算方法研究明白了,在此整理

一、对列宽的计算:

对QTableWidget表格部件的每个项的列宽计算方式如下:

1.1、获取表头的sectionResizeMode属性

通过QTableWidget.horizontalHeader()方法取部件的水平表头,通过表头的方法取表头的sectionResizeMode属性。

关于sectionResizeMode请参考《PyQt(Python+Qt)学习随笔:QHeaderView.ResizeMode取值及含义》。

示例代码:
 sectionResizeMode = self.tableWidget.horizontalHeader().sectionResizeMode()
1.2、 根据sectionResizeMode不同采用不同方法计算项的列宽
1.2.1、sectionResizeMode=QHeaderView.Stretch

各列平分部件视口的宽度,数据宽度超过列宽时自动换行显示或缩略显示(即只显示部分),但当平分后的宽度小于水平表头的minimumSectionSize时,则宽度设置为minimumSectionSize大小,展示不下的内容会进入视口之外,需要水平滚动才可见。

minimumSectionSize的获取方法示例代码:
minimumSectionSize=self.tableWidget.horizontalHeader().minimumSectionSize()
1.2.2、sectionResizeMode=QHeaderView.Fixed

各列固定列宽为水平表头的defaultSectionSize大小,无法手工调整大小,可以通过编程调用 resizeSection()调整大小,数据超过列宽时将缩略显示。

1.2.3、sectionResizeMode=QHeaderView.Interactive

列宽缺省大小为水平表头的defaultSectionSize大小,可以通过手工或编程调用 resizeSection()调整大小,数据超过列宽时将缩略显示。

1.2.4、sectionResizeMode=QHeaderView.ResizeToContents
  1. 判断项是否设置了sizeHint,如果没有设置则按项的内容计算列宽,确保所有项的内容在一行上完整展示
  2. 如果项设置了sizeHint,则取sizeHint的宽和水平表头horizontalHeader().minimumSectionSize()两者之间最大值作为项的列宽。
1.3、计算同列各项(含表头项)的列宽后,取整列所有项列宽的最大值作为该列(该节)的列宽。

二、对行高的计算:

对QTableWidget表格部件的每个项的行高计算方式如下:

2.1、获取表头的sectionResizeMode属性

通过QTableWidget.horizontalHeader()方法取部件的水平表头,通过表头的方法取表头的sectionResizeMode属性,

示例代码:
sectionResizeMode = self.tableWidget.verticalHeader().sectionResizeMode()
2.2、 根据sectionResizeMode计算项的列宽
2.2.1、sectionResizeMode=QHeaderView.Stretch

各行平分部件视口的高度,当平分高度小于竖直表头的minimumSectionSize()值时,项的高度最小为minimumSectionSize()值,当项高小于实际数据高度时,数据被遮蔽部分可能导致无法识别。当数据超出视口的高度时,需要滚动才能查看未展示数据。

2.2.2、sectionResizeMode=QHeaderView.Fixed

各行固定行高为竖直表头的defaultSectionSize大小,无法手工调整大小,可以通过编程调用 resizeSection()调整大小。

2.2.3、sectionResizeMode=QHeaderView.Interactive

行高缺省大小为竖直表头的defaultSectionSize大小,可以通过手工或编程调用 resizeSection()调整大小。

2.2.4、sectionResizeMode=QHeaderView.ResizeToContents
  1. 判断项是否设置了sizeHint,如果没有设置则按项的内容计算项高,确保项的内容在竖直方向没有遮盖
  2. 如果项设置了sizeHint,则取sizeHint的高和竖直表头verticalHeader().minimumSectionSize()两者之间最大值作为项的高宽。
2.3、计算同行各项的项高后,取整行所有项的项高最大值作为该行的行高。

特别说明:

上述介绍中介绍的是否设置了sizeHint,是指显示调用了项的setSizeHint(QSize size)方法,只要调用了该方法,无论参数size设置为多少,包括QSize(0,0)、QSize(-1,-1)都认为是设置了sizeHint。而如果项没有调用setSizeHint方法去设置sizeHint,此时调用项的sizeHint()方法返回的是QSize(-1,-1),与调用设置为QSize(-1,-1)时的sizeHint()返回值一样无法区分,应该是Qt和PyQt采用了其他方式标记是否进行过设置。

老猿Python,跟老猿学Python!

PyQt(Python+Qt)学习随笔:QTableWidget表格部件中行高和列宽的计算方式的更多相关文章

  1. PyQt(Python+Qt)学习随笔:QWidget部件的palette属性以及ColorGroup、colorRole的用途和含义

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 1.palette属性 QWidget部件的palette属性用于控制 ...

  2. PyQt(Python+Qt)学习随笔:利用QWidget部件的palette以及ColorGroup、colorRole局部调整部件的特定范围颜色

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<PyQt(Python+Qt)学习随笔:QWidget部件的 ...

  3. PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性

    autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...

  4. PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性

    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...

  5. PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性

    toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...

  6. PyQt(Python+Qt)学习随笔:部件的大小策略sizePolicy的含义

    在Qt Designer中的每个部件,除了设置部件的位置(geometry)之外,还可以指定部件的大小策略sizePolicy.部件的sizePolicy用于说明部件在布局管理中的缩放方式,当部件没有 ...

  7. PyQt(Python+Qt)学习随笔:Qt Designer中QAbstractButton派生按钮部件的shortcut 属性

    shortcut 属性保存与按钮关联的快捷键.可以使用shortcut()和setShortcut(QKeySequence)访问和设置该属性. 关于这个属性官网介绍的不多,经老猿实际验证,它与tex ...

  8. PyQt(Python+Qt)学习随笔:Qt Designer中QAbstractButton派生按钮部件的icon属性和iconSize属性

    icon属性 icon属性保存按钮上展示的图标,图标的缺省大小由图形界面的样式决定,但可以通过 iconSize 属性进行调整. 图标的几种子属性状态的含义与QWidget的windowIcon属性相 ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中spacer部件的sizeHint属性

    在两种Spacer部件中都有sizeHint属性,在<PyQt(Python+Qt)学习随笔:Qt Designer中部件的三个属性sizeHint缺省尺寸.minimumSizeHint建议最 ...

随机推荐

  1. python00

    # Python* [什么是 Python 生成器?](#什么是-Python-生成器)* [什么是 Python 迭代器?](#什么是-Python-迭代器)* [list 和 tuple 有什么区 ...

  2. Android测试三件套:传文件、抓包、看日志

    在对安卓进行测试时,我们需要把 apk 传到安卓机上,对请求抓包,同时监控应用日志.本文就来讲讲具体操作. 安卓机是指基于安卓的机器 ,如手机.POS 机.电视盒子等. 传文件 我们拒绝用 U 盘传文 ...

  3. 搭建面向NET Framework的CI/CD持续集成环境(一)Windows服务器安装Jenkins

    前言 网上大多数都是针对主流的Spring Cloud.NET Core的CI/CD方案.但是目前国内绝大部分的公司因为一些历史原因无法简单的把项目从NET Framework切换升级到NET Cor ...

  4. tcp 保活定时器分析 & Fin_WAIT_2 定时器

    tcp keepalive定时器 http server 和client端需要防止"僵死"链接过多!也就是建立了tcp链接,但是没有报文交互, 或者client 由于主机突然掉电! ...

  5. windows10 vs2017编译opencv_contrib3.4.7的小坑及编译好的资源

    1.注意要用正斜杠  /    不要用 \  https://github.com/opencv/opencv/issues/11655 CMake Error at cmake/OpenCVModu ...

  6. 极客mysql13

    1:为啥删除了表的一半数8据,表文文件大小没变化?因为delete 命令其实只是把记录的位置,或者数据页标记为了"可复用",但磁盘文件的大小是不会变的.也可以认为是一种逻辑删除,所 ...

  7. OpenCV之图像归一化(normalize)

    什么图像归一化 通俗地讲就是将矩阵的值通过某种方式变到某一个区间内 图像归一化的作用 目前能理解的就是归一化到某个区间便于处理,希望高人可以指点 opencv文档中的介绍 C++: void norm ...

  8. UNP第11章——名字与地址转换

    1.域名系统 程序中只使用主机名和服务名的好处是,如果IP或端口变化,只需要改变映射关系,不需要重新编译程序. 1.1 资源记录 DNS的条目为资源记录,有用的项如下: A IPv4地址 AAAA I ...

  9. day002|python基础回顾2

    目录 00 上节课复习 01 基本数据类型 02 与用户交互 03 运算符 04 流程运算之if判断 05 流程判断之while循环 06 TEST 00 上节课复习 ""&quo ...

  10. Mysql_笔记2018.1.29

    1.主要数据库 Oracle MySQL Sqlsever 微软 MongoDB (非关系型数据库) 2.MySql 专业词语 1.数据库:一些关联表的集合 2.数据表:表示数据的矩阵 3.列:同ex ...