QListView实现自定义的控件展示(可以根据选中与否置顶展示)

文章目录

  • 0 问题引入
  • 1、方案1:使用QListwidget+自定义的widget
    • 1.1 效果
    • 1.1 思路
  • 2、方案2:使用QListView+自定义model+自定义delegate
    • 2.1.浅谈
    • 2.2.实现
  • 3、总结
  • 4、引用


在这里插入图片描述

0 问题引入

在这里插入图片描述

问题:有人问我如何实现上图的功能,当时我脑海里有了Qlistwidget+自定义litem不就搞定了吗,可是还有选中排序功能,还有可能该列表有上百项(性能问题),该如何解决?实际在探索中还是有点小困难。


1、方案1:使用QListwidget+自定义的widget

看效果:
在这里插入图片描述

1.1 效果

1、实现上图类似的每一行展示的数据
2、点击选中的某一行之后会跳转到最前端
3、未选中的直接放在最后面
基本上满足条件,但是还存在看不见的弊端
1、上述的选中展示到最前端实际上是无奈之举,把那一行删除,然后再最前端插入,这样会导致再实时刷新数据的时候可能会崩溃(虽然也没有)
2、再上百上千条数据的时候有一点慢(虽然也能接收)
3、我想达到的效果是只移动,不删除。

1.1 思路

1、插入一行代码

   QListWidgetItem *pItem = new QListWidgetItem("");     //新增加一个itemSWidget *sitem = new SlistItem(pItem,name,ischeck);   // SWidget 是自定义的控件,就是每一         //行的效果:一个checkbox+若干个labellistvew->addItem(pItem);listvew->setItemWidget(pItem,sitem);

2、实现选中之后到最前端,未选中到最后端:
思路是首先删除改行,然后获取改行的信息,重新new一个item和widget再插入到你想去的位置
引用1文章那样的思路是在删除item的widget保存一份,这个在我这里行不通,必须重新建立,可能是自定义的类型无法转换的问题。


2、方案2:使用QListView+自定义model+自定义delegate

2.1.浅谈

之前用过Qlisttabel的时候遇到过大量数据同时展示的时候,那时候就重新了model类,才勉强接住那个数据刷新,其实一般的速度,原生的就已经够用了。引用文章2里提出的是大致思路。

QListView *listview = new QListView(this);       //创建QListView对象
listview->setGeometry(50, 20, 100, 200);         //设置位置和大小QStringList list;                                //创建数据显示列表
list.append("苹果");
list.append("香蕉");
list.append("桃子");//使用数据列表创建数据显示模型
QStringListModel *listmodel = new QStringListModel(list);
listview->setModel(listmodel);                   //设置模型到listview上listview->setMovement(QListView::Free);          //设置数据可以自由拖动
listview->setSpacing(2);                         //设置数据的间距

2.2.实现

listview使用自定义的model和delegat额也很简单。
伪代码如下(示例):

    listview = new QListView(this);model = new CustomListModel();delegate = new CustomDelegate();listview ->setModel(model);listview ->setItemDelegate(delegate);

需要注意的是(根据官网,需要继承QAbstractListModel与以及实现必要的函数)

class CustomListModel : public QAbstractListModel
{///必须实现的函数,可以看官方手册,很详细int rowCount(const QModelIndex &parent) const;QVariant data(const QModelIndex &index, int role) const;bool setData(const QModelIndex &index, const QVariant &value, int role);};class CustomDelegate : public QStyledItemDelegate
{//描绘画面显示void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex   &index) const;//处理鼠标事件bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index);
};

具体代码不展示了,思路就是这样。代码可以参考引用中的3和4.


3、总结

上述两种方法都没有问题,在实际过程中第二种方法显得麻烦一点,主要是paint函数要把自定义控件给画出来(需要时间和耐心),然后可以根据自己苏旭去渲染,确实提高一些效率,所以酌情去使用,后来我还是使用第一种办法,优化了一些逻辑也是很好的实现效果。


4、引用

1、QListWidget添加自定义Widget后移动Item问题和方法
2、深入浅出 Qt 中 QListView 的设计思想,并掌握大规模、高性能列表的实现方法
3、QListView 自定义delegate和model, 添加checkbox、按钮、文本
4、QListView 使用Delegate定制


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

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

相关文章

手把手使用 SVG + CSS 实现渐变进度环效果

效果 轨道 使用 svg 画个轨道 <svg viewBox"0 0 100 100"><circle cx"50" cy"50" r"40" fill"none" stroke-width"10" stroke"#333"></circle></svg>简单的说&#xff0c;就是…

【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)

【Gin】深度解析&#xff1a;在Gin框架中优化应用程序流程的责任链设计模式(下) 大家好 我是寸铁&#x1f44a; 【Gin】深度解析&#xff1a;在Gin框架中优化应用程序流程的责任链设计模式(下)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分&#xf…

计算机毕业设计Hadoop+Spark旅游景点可视化 旅游景点推荐系统 景区游客满意度预测与优化 Apriori算法 景区客流量预测 旅游大数据 景点规划

### 开题报告 **论文题目&#xff1a;** 基于Spark的旅游景点可视化系统的设计与实现 **研究背景与意义&#xff1a;** 随着旅游业的快速发展&#xff0c;人们对旅游信息的获取和处理需求越来越高。传统的旅游信息系统虽然能够提供静态的数据查询和展示功能&#xff0c;但在…

C++(区别于C的)基础内容总结

参考&#xff1a; C 教程 | 菜鸟教程 (runoob.com) 简介 C 被认为是一种中级语言&#xff0c;它综合了高级语言和低级语言的特点。 C 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C 进一步扩充和完善了 C 语言&#xff0c;最初命名为带类的C&…

Java中类装载的执行过程

类装载的执行过程 类从加载到虚拟机中开始&#xff0c;直到卸载为止&#xff0c;它的整个生命周期包括了&#xff1a;加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中&#xff0c;验证、准备和解析这三个部分统称为连接&#xff08;linking&#xff09;。 1.加载 …

学习记录(9):Prompt提示词技巧

依旧照例先感谢前辈们的慷慨分享 今天学习的是这篇文章↓ 原文&#xff1a;转自公主号“博金斯的AI笔记” —《4篇Prompt论文的提示词技巧, 3 个 GPTs 实例测试》 文章目录 一、提示词框架二、逻辑链&#xff08;Chain of thought&#xff09;三、思维树&#xff08;Tree of th…

[渗透测试学习] PermX-HackTheBox

文章目录 PermX-HackTheBox信息搜集漏洞利用权限提升参考文章PermX-HackTheBox 信息搜集 nmap扫描一下端口 nmap -sC -v 10.10.11.23扫描结果如下 PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 256 e2:5c:5d:8c:47:3e:d8:72:f7:b4:80:03:49:86:6d:ef (ECDSA…

二维码直达App,Xinstall为你打通运营任督二脉

在移动互联网时代&#xff0c;App的推广和运营显得尤为重要。然而&#xff0c;许多企业在投入大量资源进行App推广和运营时&#xff0c;总会遇到一些棘手的问题&#xff0c;如用户转化率低、数据分析困难等。今天&#xff0c;我们要为大家揭秘一个神奇的助手——Xinstall&#…

Github2024-07-29 开源项目周报Top15

根据Github Trendings的统计,本周(2024-07-29统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目2Java项目2HTML项目2C项目2TypeScript项目2JavaScript项目2非开发语言项目1Vue项目1Go项目1Dart项目1C++项目1Rust项目1Jupyter Note…

【Linux】-----进度条小程序

目录 前言 基本知识 Ⅰ、回车和换行 Ⅱ、缓冲区 两个有意思的现象 简单定义 刷新缓冲区 简易倒计时程序 进度条代码 多文件下makefile写法 一代(无任何场景) procs1.h代码 procs1.c代码 主函数main1.c 一代运行结果&#xff1a; 二代 (搭配下载场景) procs2.c代…

在jmeter中使用javascript脚本

工作上遇到一个压力测试的需求&#xff0c;需要测试几个考试相关的接口。其中有一个获取试题详情的接口&#xff0c;和一个提交答题信息的接口。后一个接口以上一接口的返回内容为参数&#xff0c;添加上用户的答案即可。jmeter提供了非常多的方式可以实现该需求&#xff0c;这…

MySQL分组查询有关知识总结

目录 4. 分组查询&#xff08;group by&#xff09; 4.1 概述 4.2 分组函数 4.2.1 单个使用 4.2.2 组合使用 4.2.3 注意&#xff01; 4.3 group by 4.3.1 单个字段 4.3.2 多个字段 4.3.3 提醒&#xff01; 4.4 having 4.5 分组查询演示 4. 分组查询&#xff08;…

稀疏矩阵和稠密矩阵

1.csr_matrix compress sparse row&#xff0c;因此csr是按行压缩的稀疏矩阵。 稀疏矩阵由于0值过多&#xff0c;仅记有值的矩阵位置索引&#xff0c;如下图打印所示。 更多矩阵介绍参考这篇博文【Scipy学习】Scipy中稀疏矩阵用法解析&#xff08;sp.csr_matrix&#xff1b;s…

国家网络身份个人认证方法

申领网络身份认证后&#xff0c;用户会得到一张虚拟的“网络身份证”&#xff0c;它可以向需要实名认证的互联网平台进行认证&#xff0c;不再需要输入姓名和身份证号等信息。 申请方式&#xff1a;各手机应用平台搜索国家网络身份认证即可&#xff08;必须支持NFC才能申请&am…

大模型三种模式Embedding、copilot、Agent

大模型的三种应用模式——Embedding、Copilot、Agent——代表了不同级别的智能化和自动化程度&#xff0c;以及与人类用户的交互方式。下面是每种模式的具体解释&#xff1a; 嵌入模式&#xff08;Embedding Mode&#xff09; 定义&#xff1a;在嵌入模式中&#xff0c;大模型…

每日一题——贪心算法

1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 一开始有点理解错他的意思&#xff0c;以为是i是题目中会给出&#xff0c;所以一开始没有什么思路&#xff0c;然后当看了题解之后&#xff0c;就知道了原来i是自己订的&#xff0c…

认识经典蓝牙

现在BLE很流行&#xff0c;本人接触BLE也更多&#xff0c;而对经典蓝牙BR/EDR的开发知之甚少&#xff0c;而且网上关于经典蓝牙的资料也很少&#xff0c;所以&#xff0c;想要有更多了解。 参考&#xff1a; https://www.nordicsemi.cn/news/bluetoothle-and-bluetoothclassic/…

网页设计师必备!10个免费的设计素材网站推荐

当网页设计师使用网页设计材料时&#xff0c;他们会优先考虑那些免费和高质量的网页设计材料网站。找到一个免费和高质量的网页设计材料网站并不容易&#xff0c;有些网站要么需要打开材料网站成员&#xff0c;要么设计材料质量很差。即时设计总结了10个免费的网页设计材料网站…

WEB服务器的详解与部署

WEB服务器也称为网页服务器或HTTP服务器 WEB服务器使用的协议是HTTP或HTTPS HTTP协议默认端口号&#xff1a;TCP 80 HTTPS协议默认端口号&#xff1a;TCP 443 浏览器其实就是 HTTP 客户端 WEB服务器发布软件 微软&#xff1a;IIS(可以发布web网站和FTP站点)linux&#x…

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——2Yolo使用之ONNX模型准备

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——2Yolo使用之ONNX模型准备 ​ 大家好&#xff0c;因为板端BPU环境&#xff0c;可以加速目标检测的速度&#xff0c;所以今天在此先给大家带来如何准备一个模型&#xff0c;下一期会给大家带来如何在板端部…