QT:QListView实现table自定义代理

embedded/2024/11/23 22:51:34/

介绍

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/embedded/139958.html

相关文章

Vision-Language Models for Vision Tasks: A Survey 论文解读

摘要 大多数视觉识别研究在深度神经网络(DNN)训练中严重依赖于人工标注的数据,且通常为每个单一的视觉识别任务训练一个DNN,导致这种视觉识别范式既繁琐又耗时。为解决这两个挑战,近年来对视觉语言模型(VL…

Mesh路由组网

Mesh无线网格网络,多跳(multi-hop)网络,为解决全屋覆盖信号,一般用于家庭网络和小型企业 原理 网关路由器(主路由,连接光猫),Mesh路由器(子路由,…

【Golang】——Gin 框架中的表单处理与数据绑定

在 Web 应用开发中,表单是用户与服务器交互的重要手段。Gin 框架对表单处理提供了高效便捷的支持,包括数据绑定、验证等功能。在本篇博客中,我们将详细介绍如何使用 Gin 框架处理表单数据,涵盖基础操作与进阶技巧,帮助…

【深度学习】金属齿轮缺陷检测【附链接】

概述 金属齿轮作为机械传动系统中的关键部件,质量直接影响整个设备的性能与可靠性。随着工业自动化的发展,传统的人工检测方法逐渐暴露出效率低、准确性差等问题。AI技术的引入,为金属齿轮的缺陷检测提供了新的解决方案。 金属齿轮缺陷种类…

Python+7z:将文件和目录压缩为ZIP文件

在这个教程中,我们将学习如何使用Python脚本将文件和目录压缩为ZIP文件。我们将使用subprocess模块来调用外部命令行工具7z,这是一个功能强大的文件压缩工具。以下是详细的步骤和代码解析。 1. 准备工作 在开始之前,请确保你的系统中已经安…

基于 NCD 优化的非线性优化 PID 控制

基于 NCD 优化的非线性优化 PID 控制 1. 引言 非线性控制设计 (Nonlinear Control Design, NCD) 是一种强大的控制方法,能够有效处理非线性系统的复杂动态行为。通过将 NCD 方法 应用于 PID 控制器的优化设计,可以实现对复杂非线性系统的高效控制和性能…

使用 PyTorch 实现并训练 VGGNet 用于 MNIST 分类

本文将展示如何使用 PyTorch 实现一个经典的 VGGNet 网络,并在 MNIST 数据集上进行训练和测试。我们将从模型构建开始,涵盖数据预处理、模型训练、评估、保存与加载模型,以及可视化预测结果等全过程。 1. VGGNet 模型的实现 首先,…

Docker nginx容器高可用(Keepalived)

概述 Keepalived主要作用:在多个服务器上安装Keepalived并且为各个服务器的Keepalived指定相同的虚拟IP。该虚拟IP根据服务器上Keepalived配置的角色、优先级 决定出现在其中一台服务器上,当拥有虚拟IP的服务器Keepalived进程被杀死后,那么此…