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

QT:QListView实现table自定义代理

介绍

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.kler.cn/a/408982.html

相关文章:

  • SQL注入--文件读写注入--理论
  • Stable Diffusion初步见解(二)
  • 揭秘云计算 | 5、关于云计算效率的讨论
  • docker搭建私有的仓库
  • 李宏毅机器学习课程知识点摘要(6-13集)
  • 快速图像识别:落叶植物叶片分类
  • 前端工程化-node/npm/babel/polyfill/webpack 一文速通
  • Linux的开发工具(二)
  • XML文件(超详细):XML文件概念、作用、写法、如何用程序解析XML、写入XML、dom4j框架、DTD文档、schema文档
  • python成绩分级 2024年6月python二级真题 青少年编程电子学会编程等级考试python二级真题解析
  • tcpdump抓取流量包详解
  • 九、FOC原理详解
  • Python毕业设计选题:基于django+vue的企业it资产管理系统
  • Unity 设计模式-原型模式(Prototype Pattern)详解
  • 城电科技|太阳能折叠灯:点亮你的便捷之光
  • 【Ubuntu】安装rpm文件
  • Linux上安装单机版Kafka
  • 移动端自动化环境搭建_Android
  • 网络安全公司150强
  • 鸿蒙主流路由详解
  • vim 分割窗口后,把状态栏给隐藏
  • 前端框架 Redux tool RTK 总结
  • STM32总体架构简单介绍
  • 【SQL】【数据库】语句翻译例题
  • IDEA 添加外部.jar包。maven本地仓库录入新jar包。IDEA maven 命令巧妙使用。
  • php 限制访问次数