102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程

自定义实现的Table控件,支持跨qt版本,兼容qt5,qt6!

截图如下所示:

黑色风格如下所示:

视频演示入口:Qt QML QianWindowV2.5(新增曲线综合示例、QML最全Table交互示例、支持qt5/qt6)_哔哩哔哩_bilibili

1.示例页面入口

源码已更新至QianWindow2.5版本中,位于Table交互分页里,如下图所示:

分页界面实现位于pages/QianTableTestPages/QianTableEditPage.qml,如下图所示:

2.Table新增属性-多列固定

多列固定用到columnfixedEnable使能属性和columnfixedNum固定列数属性,假如columnfixedEnable为true, columnfixedNum为3则表示固定前3列表头。

3.Table新增属性-行列拖拽

行列拖拽相关属性如下所示:

  • rowDragEnable: bool, 行拖拽使能,如果为false,则无法进行拖拽,并且行拖拽图标也不会显示
  • rowDragWidth, int, 行拖拽图标的宽度,一般默认值即可
  • rowDragIndex, int, 行拖拽索引号,未拖拽时的值为-1,如果正在拖拽则会实时更新值
  • columnDragEnable: bool, 列拖拽使能
  • columnDragIndex, int, 列拖拽索引号,未拖拽时的值为-1,如果正在拖拽则会实时更新值
  • columnDragStretchIndex: int, 列伸展索引号,比如对某列进行拉伸,未拖拽时的值为-1
  • dragContentBackColor: color, 拖拽源对象的背景色。
  • dragLineColor: color, 拖拽到目标位置的提示线颜色
  • signal rowDragMoved(int preRow, int crtRow) : 行拖拽信号,preRow是拖拽目标之前的行号, ctrRow是拖拽目标当前的行号

4.Table新增属性-标题菜单栏

标题菜单栏属性为headerMenu,当用户右击时就会调用headerMenu显示,并设置headerMenuColumnIdx为对应点击所在的列号

示例界面如下所示:

对应代码如下所示:

             headerMenu: Menu {id: _headerMenuContent MenuItem {text: "    表头固定至此列"font.pixelSize: 14implicitWidth: 103implicitHeight: 28font.family: "Microsoft Yahei"onTriggered: {table.columnfixedEnable = truetable.columnfixedNum = table.headerMenuColumnIdx + 1}}MenuItem {text: "← 左侧插入新列"font.pixelSize: 14implicitWidth: 103height: visible ? 28 : 0visible: table.headerMenuColumnIdx != 0font.family: "Microsoft Yahei"onTriggered: {if (tableHeaderComp.status != Component.Ready) {message('info', "加载失败:" + tableHeaderComp.errorString())return;}let i = _headerMenuContent.getValidReserveColumnIdx();if(i < 0) {message('info', "已超出最大支持扩展")return;}// ...}}MenuItem {text: "→ 右侧插入新列"font.pixelSize: 14implicitWidth: 103height: visible ? 28 : 0visible: table.headerMenuColumnIdx != table.headers.length-1font.family: "Microsoft Yahei"onTriggered: {if (tableHeaderComp.status != Component.Ready) {message('info', "加载失败:" + tableHeaderComp.errorString())return;}let i = _headerMenuContent.getValidReserveColumnIdx();if(i < 0) {message('info', "已超出最大支持扩展")return;}//...}}MenuItem {text: "    重命名标题"font.pixelSize: 14implicitWidth: 103implicitHeight: 28font.family: "Microsoft Yahei"onTriggered: {let target = table.headers[table.headerMenuColumnIdx]skinQianInputDialog.dialogOpen(`更改标题:`, table.headers[table.headerMenuColumnIdx].display, function(defaultInputText, text) {if(!text.length) {message('info', "更改标题不能为空");return;}if(defaultInputText == text) {return;}target.display = text})}}MenuItem {text: "✕ 删除该列"font.pixelSize: 14implicitWidth: 103implicitHeight: 28font.family: "Microsoft Yahei"onTriggered: {// ...}}}

5.单元格委托内置委托使用

每行每列对应某个数据都称为一个个单元格,由于Table每列的显示委托和编辑委托往往是一样的,所以最新Table的单元格委托存在TableHeader标题列类中。

内置委托相关属性介绍如下所示:

  • cellDelegateType: enum CellDelegateType,单元格委委托, 默认为文本委托,其它值如下所示:
    • CellDelegateTypeText 文本委托,如下图所示:
    • CellDelegateTypeColorComboBox 带颜色下拉框委托,如下图所示:
    • CellDelegateTypeUsersComboBox 多用户下拉框委托,如下图所示:
    • CellDelegateTypeCalendar 日期日历委托,如下图所示:
    • CellDelegateTypeTime 时间委托,如下图所示:
    • CellDelegateTypeCustom 自定义委托,如果设置为CellDelegateTypeCustom,则需要设置cellDelegateCustomShowItem属性指定显示委托对象

如果只想显示不编辑,则设置customEditEnable属性为false即可,customEditEnable默认为true。

如果我们需要设置为自定义显示委托,则设置cellDelegateType属性为CellDelegateTypeCustom,并给cellDelegateCustomShowItem属性设置一个基于Item子类的显示委托即可。

Table给显示委托提供了多个附加属性,常用的如下所示:

  • modeldata: key或者keys对应的数据
  • rowIdx: 行号
  • columnIdx: 列号

6.重点概要

如果设置cellDelegateType属性为CellDelegateTypeCustom,并且customEditEnable为true时,假如未设置cellDelegateCustomEditItem编辑委托对象,那么编辑时默认为文本方式,可以参考Table组件界面下的成绩列:

如果我们想要设置显示为内置委托,编辑时为自定义委托,则设置cellDelegateCustomEditItem编辑委托对象即可,可以参考Table组件界面下的姓名列:

如果我们想设置编辑委托是一个弹出型窗口,设置cellDelegateCustomEditItem编辑委托对象的同时,还需要设置cellEditHideCellDelegateShowLayer为false,否则编辑时会自动隐藏掉显示委托,可以参考Table组件界面下的日期列:

如果我们编辑的内容需要进行审核确认,可以设置customEditConfirmCallback属性,比如Table组件界面下的成绩列限制用户只能输入0~100的值,对应的代码如下所示:

如果cellDelegateCustomShowItem显示委托属性是个交互性控件(比如是个button),那么我们需要设置customEditEnable为false才能进行交互,否则会被编辑委托占用。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【单片机毕业设计选题24061】-基于蓝牙的单片机通信系统

系统功能: 1、本系统硬件由两块STM32单片机&#xff0c;DHT11&#xff0c;光敏传感器&#xff0c;12864oled和HC-05蓝牙模块组成。 2、单片机1HC-05蓝牙模块做为主机&#xff0c;单片机2HC-05蓝牙模块做为从机。 3、单片机从机将采集到温湿度&#xff0c;光照强度等信息通过…

使用mybatis的statementHander拦截器监控表和字段并发送钉钉消息

新建mybatis的statementHander拦截器拦截器 类 面试题&#xff1a; 2.实现 解析Sql时引入JSqlParser JSqlParser 是一个 SQL 语句解析器。 它将 SQL转换为可遍历的 Java 类层次结构。 <dependency><groupId>com.github.jsqlparser</groupId><artifac…

[IDEA插件] JarEditor 编辑jar包(直接新增、修改、删除jar包内的class文件)

文章目录 1. 安装插件 JarEditor2. 在IDEA中添加外部JAR包3. JarEditor 使用介绍 之前我们需要修改jar内文件的时候需要解压jar包&#xff0c;反编译class&#xff0c;新建java源文件&#xff0c;修改代码&#xff0c;再编译成class&#xff0c;替换jar包内的class文件。 现在…

数据库作业5---视图

创建表 创建部门表&#xff08;dept&#xff09;和员工表&#xff08;emp&#xff09; create table dept(dept_id int primary key auto_increment comment 部门编号,dept_name char(20) comment 部门名称);insert into dept(dept_name) values(销售部),(财务部),(生产部),(…

Day03-索引模板,DSL语句,集群迁移API,ES集群状态统计API,KQL语句及分片重路由API实战

Day03-索引模板&#xff0c;DSL语句&#xff0c;集群迁移API&#xff0c;ES集群状态统计API&#xff0c;KQL语句及分片重路由API实战 1、索引模板1.1 什么是索引模板1.2 查看索引模板1.3 创建/修改索引模板1.4 删除索引模板 2、ES的DSL语句查询2.1 什么是DSL2.2 全文检索-match…

tusimple车道线检测 标注自己的数据集

一、打开labelme工具进行数据标注 二、数据格式转换 2.1 标签转换 运行Anaconda Prompt&#xff0c;进入json标签文件所在目录&#xff0c;逐个转换&#xff0c;分布运行 labelme_json_to_dataset 0000.json labelme_json_to_dataset 0001.json labelme_json_to_dataset 000…

redis查询慢,你们是如何查询优化?(运维篇3)

1、查看是否写入了bigkey 如果你查询慢日志发现&#xff0c;并不是复杂度过高的命令导致的&#xff0c;而都是 SET / DEL 这种简单命令出现在慢日志中&#xff0c;那么你就要怀疑你的实例否写入了 bigkey。 Redis 在写入数据时&#xff0c;需要为新的数据分配内存&#xff0c;相…

2024年公共文化与社会服务国际会议(ICPCSS 2024)

2024年公共文化与社会服务国际会议 2024 International Conference on Public Culture and Social Services 【1】会议简介 2024年公共文化与社会服务国际会议是一个集学术性、实践性和国际性于一体的盛会。我们期待与您共同探讨公共文化与社会服务的未来发展方向&#xff0c;为…

【linux】服务器设置所有用户创建虚拟环境到默认路径

【linux】服务器设置所有用户创建虚拟环境到默认路径 【创作不易&#xff0c;点点赞关注收藏】&#x1f600; 需要安装anaconda3的小伙伴可以看一下我前面的博文linux安装anaconda3 一、情况说明 我的anaconda3安装在"/public/apps/anaconda3/“&#xff0c;我希望所有…

C#实现最短路径算法

创建点集 double r 200 * 500;double width 1920;double height 1080;int col (int)(r / width);int row (int)(r / height);List<(double, double)> list1 new List<(double, double)>();for (int i 0; i < row; i){var y i * height;if (y < r){va…

好莱坞级别AI视频工具Odyssey亮相!AI世界动态回顾

好莱坞级别的视觉AI&#xff1a;Odyssey 首先&#xff0c;我们要提到的就是Odyssey——一款新晋AI视频工具&#xff0c;它以其好莱坞级别的视觉AI能力引起了广泛关注。奥德赛展示的一些片段令人印象深刻&#xff0c;包括精美的无人机镜头、风景画面以及专业级的B-roll素材。虽…

Snap Video:用于文本到视频合成的扩展时空变换器

图像生成模型的质量和多功能性的显著提升&#xff0c;研究界开始将其应用于视频生成领域。但是视频内容高度冗余&#xff0c;直接将图像模型技术应用于视频生成可能会降低运动的保真度和视觉质量&#xff0c;并影响可扩展性。来自 Snap 的研究团队及其合作者提出了 "Snap …

运算放大器(2)

&#xff08;1&#xff09;反向放大器 Vout(-R2/R1)*Vi 图一运放的同向端接地0V&#xff0c;反向端和同向端虚短&#xff0c;所以也是0V 反向输入端输入电阻很高&#xff0c;虚断&#xff0c;几乎没有电流注入和流出&#xff0c;那么R1和R2相当于是串联的&#xff0c;流过一个…

Nacos服务公网环境登陆报密码错误问题排查

作者&#xff1a;小丫 一、问题现象 nacos服务内网可以正常登录&#xff0c;如下&#xff1a; 走公网代理出来之后&#xff0c;无法正常登录&#xff0c;报错"用户名密码错误" 二、排查步骤 1、链路分析 首先确认公网代理的链路&#xff1a; 域名—>haprox…

Epson打印机日常问题和解决办法

1、打印过程中缺纸&#xff0c;重新放入纸张之后&#xff0c;打印机出错。 打开“控制面板”&#xff0c;进入“设备与打印机”&#xff1a; 选择你正在使用的打印机&#xff0c;最下面可以看到打印机状态&#xff08;我这边用完脱机了&#xff0c;所以显示脱机&#xff09;&a…

【Python实战因果推断】34_双重差分5

目录 Identification Assumptions Parallel Trends No Anticipation Assumption and SUTVA Identification Assumptions 您现在可能已经知道&#xff0c;因果推断是统计工具和假设之间的不断互动。在本文中&#xff0c;我选择从统计工具入手&#xff0c;展示 DID 如何利用单…

数据结构之单链表(赋源码)

数据结构之单链表 线性表 线性表的顺序存储结构&#xff0c;有着较大的缺陷 插入和删除操作需要移动大量元素。会耗费很多时间增容需要申请空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗即使是使用合理的增容策略&#xff0c;实际上还会浪费许多用不上的…

led灯什么牌子的质量好?口碑前五的led灯推荐

每每到开学季&#xff0c;学生们重返校园&#xff0c;各个家长和学生们也迎接新学期的前期准备工作&#xff0c;当然&#xff0c;用眼健康的考量也列位其中&#xff0c;国内的学习压力大一直是众所周知的&#xff0c;学生除了在学校长时间用眼外&#xff0c;短暂的户外休息时间…

为什么有些3d模型不能编辑?---模大狮模型网

在展览3D模型设计行业中&#xff0c;设计师们面临一个重要的技术挑战&#xff1a;为什么有些3D模型在某些情况下变得难以编辑?这一问题不仅关乎技术操作的复杂性&#xff0c;更深层次地影响着设计工作的效率和成果质量。本文将探讨这一问题的根本原因及其在实际工作中的具体表…

JSONObject和Map<String, Object>的转换

一、前言 Java开发中出参返回和入参传入更灵活的方法是使用Map<String, Object>入参或出参&#xff0c;或者使用JSONObject。 1、好处&#xff0c;参数可变&#xff0c;对接口扩展性很友好。 public ResponseData<WXModelDTO> getUserInfo(RequestBody Map<…