会话好友区设计与开发(二)

news2024/9/25 23:18:41

会话好友区设计与开发(二)

前言

        在上一集我们已经完成了对item的设计与开发,也详细解释了一些细节,但是我们上一集并没有对item进行显示,那么这一集我们会开发两个SessionFriendArea的方法以及使用一个宏开关进行测试。

需求

我们要先开发两个比较简单的方法,一个是添加item、一个是清空区域内所有item的方法。

最后弄一个宏开关进行测试。

addItem

既然要往container里面添加item,我们就需要把相关的头像、昵称以及预览信息作为参数传入。

并且我们想起来上一集我们的item的构造函数中,我们有一个owner的指针变量。我们就需要将this一并传入item的构造函数。

构造出来的item,我们就需要塞到container的layout当中。

所以代码就是以下简单的几句:

void SessionFriendArea::addItem(const QIcon &avatar, const QString &name, const QString &text)
{
    SessionFriendItem* item = new SessionFriendItem(this,avatar,name,text);
    container->layout()->addWidget(item);
}

就是这么的朴实无华。

clear

那么我们需要继续开发clear这个方法。

这个也是非常的简单,我们需要先获取container的layout,再遍历这个layout,一个一个的删除即可。

那么我们就很容易写出下面的代码

void SessionFriendArea::clear()
{
    QLayout* layout = container->layout();
    for(size_t i = 0; i < layout->count();i++){
        QLayoutItem* item = layout->takeAt(i);
        }
    }
}

至此我们就可以下班了对吧?

NO!!!怎么可能那么简单,踩坑了!!!

虽然说是遍历一个一个删,这整个逻辑并没有什么问题,但是删除之后,count也变小了啊!一边遍历一边删除是极其危险的事情。

一旦删除了元素,上面的count就变了,而且删除的元素的后面的元素的下标也会发生改变。

那我们应该怎么做呢?

第一种办法:每次都删除0号位!

第二种办法:从后往前删!

我选择第二种办法!

之后就写出以下方法啦!

void SessionFriendArea::clear()
{
    QLayout* layout = container->layout();
    for(size_t i = layout->count() - 1 ; i >= 0;i--){
        QLayoutItem* item = layout->takeAt(i);
        }
    }
}

这下就能下班咯!

老板:你小子年终奖没了!

size_t这种无符号整数,确定能小于0吗?最后这个代码是一个死循环了。所以我们就需要把他们改为int。

那好!我们终于下班了对吗?

好像也不对,总感觉少了什么东西。我们的item是怎么创建的?好好想想。

我们是new出来的东西,需要自己手动delete!

所以最终代码如下:

void SessionFriendArea::clear()
{
    QLayout* layout = container->layout();
    for(int i = layout->count() - 1 ; i >= 0;i--){
        QLayoutItem* item = layout->takeAt(i);
        if(item->widget()){
            //释放widget,new出来的对象需要手动delete
            delete item->widget();
        }
    }
}

终于是下班了。

TEST_UI

先别跑,别忘了我们的需求,还需要一个宏定义的测试呢。

直接看代码!!!

#if TEST_UI
    QIcon icon(":/resource/image/defaultAvatar.png");
    for(int i = 9527; i < 9557; i++){
        this->addItem(icon,"编号" + QString::number(i),"编号" + QString::number(i) + "听候你的差遣");
    }
#endif
}

这里我们就完成了以上的三个需求,我们接下来要看一眼测试结果。

可以看到我们的整个测试结果,但是长得好丑啊,好像左边的背景有点问题吧,那么这个问题我们会留到下一次来解决,今天就先讲到这里!

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

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

相关文章

《深入理解JAVA虚拟机(第2版)》- 第11章 - 学习笔记

第11章 晚期&#xff08;运行期&#xff09;优化 11.1 概述 频繁执行的方法或代码块&#xff0c;被认定为“热点代码”&#xff08;Hot Spot Code&#xff09;。为了提高热点代码的执行效率&#xff0c;在运行期&#xff0c;将热点代码编译成本地机器码并进行优化&#xff0c…

VD1012 单节锂离子充电电池保护IC 2.8V过放电压 SOT-353小封装芯片

VD1012内置高精度电压检测电路和延迟电路以及内置MOSFET&#xff0c;是用于单节锂离子/锂聚合物可再充电电池的保护IC。 本IC适合于对1节锂离子/锂聚合物可再充电电池的过充电、过放电和过电流进行保护。 VD1012具备如下特点:高精度电压检测电路 过充电检测电压 4.…

曝字节 AI 硬件团队首款自研产品为智能耳机,与豆包联动;OpenAI 神秘新模型或将在两周内发布丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

「OC」事件点击demo合集

「OC」事件点击demo合集 文章目录 「OC」事件点击demo合集前言可用鼠标移动的UIview突出的tabBar按钮扩大按钮的响应范围 前言 在前面通过学习事件响应流程&#xff0c;学习了许多新的内容&#xff0c;当然也学习了许多不同的用法&#xff0c;但在之前的文章之中并没有将运用到…

SDH信号的帧结构与复用

在OTN技术的学习中&#xff0c;涉及到了大量SDH的相关知识&#xff0c;例如映射&#xff0c;复用&#xff0c;开销等&#xff0c;所以简单的总结一下SDH的帧结构与复用用以辅助学习OTN技术。 DWDM&#xff08;密波&#xff09;大容量SDH&#xff08;同步数字体系&#xff09;的…

无源晶振的等效电路与电路结构解析

无源晶振&#xff0c;即不带内置振荡电路的晶体振荡器&#xff0c;它在电子设备中扮演着产生原始时钟频率的重要角色。以下是关于无源晶振的等效电路、电路结构及其关键参数的详细解析。 一、无源晶振的等效电路 无源晶振的等效电路主要包括静态电容C0、动态电容C1、谐振电阻R…

网络高级(学习)2024.9.11

目录 Modbus库函数 1.初始化和释放函数 2.功能函数 3.功能案例 Modbus RTU 1.特点 2.协议格式 3.编程思路 Modbus库函数 1.初始化和释放函数 modbus_t* modbus_new_tcp(const char *ip, int port) 功能&#xff1a;以TCP方式创建Modbus实例&#xff0c;并初始化 参数…

坐牢第三十八天(Qt)

1、使用Qt绘画事件处理画一个闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QPaintEvent>//画画处理事件 #include <QPainter>//画画 #include <QTime> //时间类 #include <QTimer>…

NVIDIA AI Workbench 让 Windows 上的 GPU 使用更加简便

NVIDIA AI Workbench 是一款免费的、用户友好型开发环境管理器&#xff0c;可在您选择的系统&#xff08;PC、工作站、数据中心或云&#xff09;上简化数据科学、ML 和 AI 项目。在 Windows、macOS 和 Ubuntu 上&#xff0c;您可以本地开发、测试项目和构建项目原型&#xff0c…

初识Maven:Java项目管理工具

实际开发中&#xff0c;伴随着项目规模的增长&#xff0c;依赖管理和构建自动化变得至关重要&#xff0c;一套标准化的项目结构有助于更好的开发项目、简化这项任务&#xff08;真的不是强迫症&#xff09; Maven&#xff0c;作为 Apache Software Foundation 维护的项目管理工…

如何获取MySQL数据表的列信息

在数据库管理中&#xff0c;了解表的结构是至关重要的。在MySQL中&#xff0c;我们可以通过几种方式来获取数据表的列信息。这不仅可以帮助我们更好地理解表的结构&#xff0c;还可以在编写查询时提供便利。以下是三种常用的方法来获取MySQL数据表的列信息。 使用 SHOW COLUMN…

HDMI彩条显示——FPGA学习笔记12

素材来自原子哥 一、HDMI简介 英文全称是High-Definition Multimedia Interface&#xff0c;即高清多媒体接口。 HDMI引脚解析&#xff08;A型&#xff09; HDMI工作连接图 HDMI工作原理 DVI编码输出示意图 二、TMDS编码&#xff08;最小化差分传输&#xff09; TMDS编码框图…

pip 阿里云镜像报错 certificate verify failed: unable to get local issuer certificate

在没有管理员身份&#xff0c;且有防火墙限制的电脑上&#xff0c;pip安装​python库包失败。​但是在普通的电脑上安装正常。​​报错内容如下&#xff1a; (SSS_web) C:\Users\HXAIYVQ>pip install flask -i https://mirrors.aliyun.com/pypi/simple/ Looking in indexes…

302.AI学术论文搜索工具的智能体验

Hey朋友们&#xff0c; 你是否曾在学术的海洋里迷失方向&#xff0c;为了找到一篇论文而苦苦挣扎&#xff1f; 就像在茫茫大海中寻找灯塔&#xff0c;我们渴望一盏明灯&#xff0c;指引我们前行。 别担心&#xff0c;今天我来给你介绍一个超级给力的工具——302.AI学术论文…

求教0基础入门大模型的学习路线?

0基础入门大模型&#xff0c;transformer、bert这些是要学的&#xff0c;但是你的第一口不一定从这里咬下去。真的没有必要一上来就把时间精力全部投入到复杂的理论、各种晦涩的数学公式还有编程语言上&#xff0c;这样不仅容易让你气馁&#xff0c;而且特别容易磨光热情。当我…

如何系统的入门大模型?

对于刚开始接触大模型&#xff08;LLM&#xff09;的研究者来说&#xff0c;系统地学习和探索是非常重要的。以下是一个循序渐进的学习路径&#xff0c;帮助你高效地入门大模型的领域。 1、浏览基础资源与课程 首先&#xff0c;你可以通过阅读几篇公众号或知乎上的文章来了解大…

动态数字时钟屏保 提升桌面美化 电脑屏幕屏保软件

时钟屏保软件可以让你的电脑更有特色&#xff0c;当你离开电脑时候&#xff0c;屏保可以保护你的桌面隐私&#xff0c;还是比较有用的一款小软件&#xff0c;今天小编给大家推荐的这款可以实现动态数字时钟的屏保软件&#xff1a;芝麻时钟 &#xff08;下载地址&#xff1a;htt…

终端显示字体背景和字体颜色

【终端显示字体背景和字体颜色等使用用法】 在命令行下想要产生五颜六色的字体和背景&#xff0c;只需要加上一些颜色代码即可。 ANSI 标准规定了一种所有终端共享的指令集&#xff0c;并要求用 ASCII 的数字字符传递所有数值信息&#xff0c;用于控制 Linux 终端上的光标位置…

抓包分析ARP协议工作原理

目录 1. ARP 协议 2. 工作原理 3. ARP 协议报文格式 4. ARP 缓存的查看和修改 5. tcpdump 抓包分析 ARP 协议工作原理 5.1 搭建 2 台虚拟机 5.2 在主机 192.168.0.155 打开一个shell命令行开启抓包监听 5.3 在主机 192.168.0.155 打开另一个shell命令行 telnet 192.168.…

恢复二叉搜索树

题目 给你二叉搜索树的根节点 root &#xff0c;该树中的两个节点被错误地交换。请在不改变其结构的情况下&#xff0c;恢复这棵树。 进阶&#xff1a;使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗&#xff1f; 示例 1&#xff1a; 输入&…