QT:QListView实现table自定义代理

devtools/2024/11/24 9:46:58/

介绍

QListVIew有两种切换形式,QListView::IconMode和QListView::ListMode,通过setViewMode()进行设置切换。因为QListView可以像QTreeView一样显示树形结构,也可以分成多列。这次目标是将ListView的ListMode形态显示为table。使用代理,使用paint进行手动绘制,实现table内容效果,但是QListView没有标题,所以要额外写一个QheadView作为表头。

ui就如上面所说的设计,上面自定义一个headview作为表头,下面放一个listview。

下面分为2部分介绍实现:表头和表格内容。

一、表头

        表头使用QHeadVIew,不用QLable的原因是headview带有鼠标事件、列宽拖拽,比较方便。

注意点:

1、如果在paint中需要贴图的(QImage),最好将image写成私有变量,在函数初始化的时候生成。因为在paint里生成一个image就会出现每绘制一个就生成一次,出现多次重复加载iamge。

2、局部绘制的判断要使用局部变量!!paint函数中进行鼠标位置判断,不要使用全局变量的矩阵与鼠标位置进行判断。paint函数属于局部的,所以在paint中所有涉及位置判断的,比如判断鼠标是否在一个Rect内,那么这个rect必须是在paint里定义赋值的,不能是全局变量,会出现问题(问题是位置高的判断不对)。这个在表格内容绘制的时候一样的。比如想在表格中实现button效果,鼠标点击在具体rect中时,发出按钮点击信号,那么这个rect也只能是paint里定义的局部变量,不能是全局。

二、表格内容

注意点:

1、鼠标事件获取。

首先是确保鼠标追踪开启。ui->listView->setMouseTracking(true);

所有的鼠标事件判断在editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)函数中写。

2、数据驱动界面绘制!!比如说,我需要实现checkbox的样式,判断item是否被点击勾选,那么可以将是否被勾选塞入item的UserRole中,在paint的时候判断userrole中对应的值为true还是false进行绘制对应状态。


http://www.ppmy.cn/devtools/136522.html

相关文章

WPF动画

在 WPF(Windows Presentation Foundation)中,主要有两种类型的动画:属性动画(Property Animation)和关键帧动画(Key - Frame Animation)。属性动画用于简单地从一个起始值平滑地过渡…

如何在 Ubuntu 20.04 上的 PyCharm 中使用 Conda 安装并配置 IPython 交互环境

如何在 Ubuntu 20.04 上的 PyCharm 中使用 Conda 安装并配置 IPython 交互环境 要在 Ubuntu 20.04 上的 PyCharm 中配置 IPython 交互环境,并使用 Conda 作为包管理器进行安装,你需要遵循一系列明确的步骤。这些步骤将确保你可以在 PyCharm 中使用 Cond…

【汇编】有关AI人工智能

随着 AI 技术的不断发展,AI大模型正在重塑软件开发流程,从代码自动生成到智能测试,未来,AI 大模型将会对软件开发者、企业,以及整个产业链都产生深远的影响。欢迎与我们一起,从 AI 大模型的定义、应用场景、…

钉钉报销集成金蝶付款单的技术实现方案

钉钉报销【月结贷款】集成到金蝶付款单【晨丰】的技术实现 在企业日常运营中,数据的高效流转和准确对接是提升业务效率的重要环节。本文将分享一个具体的系统对接集成案例,即如何将钉钉平台上的报销数据(【月结贷款】)无缝集成到…

重学SpringBoot3-Spring Retry实践

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式3.1 注解方式基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听…

设计模式的学习思路

学习设计模式确实需要一定的时间和实践,尤其是对于刚入门的人来说,因为一开始可能会感到有些混淆,尤其是当多个设计模式看起来有相似之处时。本博客是博主学习设计模式的思路历程,大家可以一起学习进步。设计模式学习-CSDN博客 1…

k8s启动springboot容器的时候,显示找不到application.yml文件

因为在k8s中 applicaton.yml文件需要加一段配置,才能使用kubectl apply -f config.yaml 下面是我之前的错误配置 apiVersion: v1 kind: ConfigMap metadata:name: test-cmnamespace: test-ns data:application.yaml: |-server:port: 8080spring:cache:jcache:conf…

谈一下开源生态对 AI人工智能大模型的促进作用

谈一下开源生态对 AI人工智能大模型的促进作用 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 开源生态对大模型的促进作用是一个多维度且深远的话题,它不仅加速了技术创新的速度,…