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

news2024/10/11 20:12:23

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

前言

在上一集,我们完成了选中和切换item的颜色变化的功能,那么这一集,我们将开始封装一些必要的函数。

需求

我们需要封装一些逻辑,那么我们也要进行分析。

在上一集我们虽然对选中了不同的item进行了颜色的切换,但是我们其实并没有真正的选中了不同的item对吗?所以我们需要做一个clickItem的一个函数。

在之前,我们暂时完成了会话好友区的界面,我们也知道好友列表还有好友申请列表长的也是大差不差,尽管在数据存储层面上不一样,那么我们可以基于SessionFriendItem把剩下的两个Item作为子类来实现。

既然SessionFriendItem成为了父类,我们就可以通过这个父类来创建子类,那么我们还要设计一个逻辑来判断我们添加的子类是哪一个,这个还是十分的好实现的。

clickItem

我们选中的这个Item,范围上不能含糊,不能小于0也不能超出布局的范围。

然后是否为空指针,我们不仅仅要判断这个item是否为空指针,还要判断里面的布局是否为空指针,这两种,我们都认为是元素不存在。

当然我们最后是需要强转成SessionFriendItem的,之后执行select的逻辑。

void SessionFriendArea::clickItem(int index)
{
    if(index < 0 || index >= container->layout()->count()){
        LOG() << "点击元素下标超出范围, index = " << index;
        return;
    }
    QLayoutItem* layoutItem = container->layout()->itemAt(index);
    if(layoutItem == nullptr || layoutItem->widget() == nullptr){
        LOG() << "指定元素不存在, index = " << index;
        return;
    }
    SessionFriendItem* item = dynamic_cast<SessionFriendItem*>(layoutItem->widget());//强转
    item->select();

}

继承SessionFriendItem

既然我们要继承SessionFriendItem,我们就要设置这两个item的类来继承SessionFriendItem。不过当然既然做了父类,我们也需要把会话item也弄一个子类出来。

/**
 * @brief 会话item实现
 * @param owner
 * @param chatSessionId
 * @param avatar
 * @param name
 * @param lastMessage
 */
SessionItem::SessionItem(QWidget *owner, const QString &chatSessionId, const QIcon &avatar,
                         const QString &name, const QString &lastMessage)
    : SessionFriendItem(owner,avatar,name,lastMessage),chatSessionId(chatSessionId)
{

}
/**
 * @brief 好友item实现
 * @param owner
 * @param userId
 * @param avatar
 * @param name
 * @param description
 */
FriendItem::FriendItem(QWidget *owner, const QString &userId, const QIcon &avatar,
                       const QString &name, const QString &description)
        :SessionFriendItem(owner,avatar,name,description),userId(userId)
{

}
/**
 * @brief 好友申请item实现
 * @param owner
 * @param userId
 * @param avatar
 * @param name
 */
ApplyItem::ApplyItem(QWidget *owner, const QString &userId, const QIcon &avatar, const QString &name)
        : SessionFriendItem(owner,avatar,name,""),userId(userId)
{

}

代码可以随便看看,我们继承SessionFriendItem的几个变量,当然,每一个变量有可能有不同,因为存储的时候也会有所不同。

通过父类添加子类

为了通过父类创建子类,我们首先就需要先引入一个枚举类型。

ItemType

/**
 * 滚动区域item类型
 */
enum ItemType{
    SessionItemType,
    FriendItemType,
    ApplyItemType
};

addItem

添加item我们就需要把item的类型和对应的id添加进去。

/**
 *  添加SessionFriendItem的子类,SeesionItem、FriendItem、ApplyItem的其中一个
 */
void SessionFriendArea::addItem(ItemType itemType, const QString& id, const QIcon &avatar, const QString &name, const QString &text)
{
    SessionFriendItem* item = nullptr;
    if(itemType == SessionItemType){
        item = new SessionItem(this, id, avatar, name, text);
    }else if(itemType == FriendItemType){
        item = new FriendItem(this, id, avatar, name, text);
    }else if(itemType == ApplyItemType){
        item = new ApplyItem(this, id, avatar, name);
    }else{
        LOG() << "未知 ItemType! itemType=" << itemType;
        return;
    }

    container->layout()->addWidget(item);
}

我们到时候的item都会类似如下图

那么我们貌似也不能完全长这样,毕竟我们到时候的好友申请去的每一条item都是需要有接受和拒绝两个按钮的。那么这个功能,我们留到下一集再说。

欲知后事如何,请听下回分解!

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

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

相关文章

LeetCode:1518.换水问题(模拟 JAVA)

目录 1518.换水问题 题目描述&#xff1a; 实现代码与解析&#xff1a; 模拟 1518.换水问题 题目描述&#xff1a; 超市正在促销&#xff0c;你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始&#xff0c;你一共购入了 numBottles 瓶水。 如果喝掉了水瓶中的水&am…

coredump设置

coredump路径查看及设置 coredump路径查看 命令1&#xff1a; cat /proc/sys/kernel/core_pattern 命令2&#xff1a; /sbin/sysctl kernel.core_pattern coredump路径修改 临时修改&#xff1a;echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern 永久修改…

基于Java的企业仓库管理系统的设计与实现(论文+源码)_kaic

摘 要 随着信息技术的不断发展&#xff0c;以及网络技术的广泛用&#xff0c;企业企业仓库存储的信息量也越来越大&#xff0c;信息变得复杂。基于人工的数据收集方式&#xff0c;在耗费大量人力的同时也降低了信息采集的效率&#xff0c;例如影响了信息正确率和信息的录入速度…

项目解决方案:连锁店视频监控接入汇聚联网解决方案

目录 一.项目背景 二.建设目标和详细需求分析 2.1建设总目标 2.2需求分析 三.系统特色 3.1数字&#xff0c;高清&#xff0c;网络化系统 3.2安全性 3.3可拓展性 3.4资源利旧&#xff0c;节约成本 四.系统实现 4.1系统方案设计 4.2拓扑组网说明 4.3用户权限管理实现…

Assignment 1 (10月12日截止)

Section 1.1 T12 &#x1f609; S o l v e &#x1f447; Solve&#x1f447; Solve&#x1f447; x x x 1 1 1- 3 x 3x 3x 2 2 2 4 x 4x 4x 3 3 3 − 4 -4 −4 3 x 3x 3x 1 1 1 − 7 x -7x −7x 2 2 2 7 x 7x 7x 3 3 3 − 8 -8 −8 − 4 x -4x −4x 1 1 1 6 x 6x 6x…

yarn install 报错 Expected version “>=18“,Got “16.20.0“

项目在初始化 (yarn install),一直报错以下信息&#xff0c;切换node 版本无法修改 1、首先使用命令检查&#xff0c;strict-ssl 是否为true和ignore-engines是否为false yarn config list2、如果不为 1 描述的值&#xff0c;使用以下命令设置 yarn config set strict-ssl t…

20241011给华硕的FX607JVCPU安装WIN10【intel的13代酷睿】

20241011给华硕的FX607JVCPU安装WIN10【intel的13代酷睿】 2024/10/11 17:55 缘起&#xff1a;同事新买的华硕笔记本电脑&#xff0c;WIN11的&#xff0c;需要降级为WIN10。 使用U盘安装WIN10的时候&#xff0c;常见现象&#xff1a;安装的时候找不到固态硬盘。 电脑使用的是&a…

推荐一个边缘物联网平台

AIoTedge是一个AIoT边缘物联网计算平台&#xff0c;它结合了边缘计算、物联网平台和泛协议软网关的功能。这个平台采用边云协同的架构&#xff0c;可以在多个点部署&#xff0c;与IoT云平台配合使用&#xff0c;提供分布式的AIoT处理能力。这种架构特别适用于需要AI云端训练和本…

HTTP代理的优点和局限性

在这个信息爆炸的时代&#xff0c;网络已成为我们获取知识、交流思想、开展商务的重要平台。但随之而来的隐私泄露、网络安全威胁、以及无处不在的网络监控&#xff0c;却让我们的每一次在线活动都充满了风险。 在这样的背景下&#xff0c;HTTP代理技术应运而生&#xff0c;它不…

歌曲怎样去掉人声留伴奏?教你几招,瞬间去除歌曲人声

在数字音乐时代&#xff0c;对音频进行编辑和处理已成为一种常见的需求。其中&#xff0c;将歌曲中的人声去除&#xff0c;仅保留伴奏部分&#xff0c;是许多音乐爱好者和创作者经常面临的任务。无论是为了制作卡拉OK伴奏&#xff0c;还是进行音乐混音和再创作&#xff0c;掌握…

养宠人崩溃的季节又到了,有什么吸浮毛宠物空气净化器推荐?

害&#xff0c;怎么转眼又到秋天了&#xff0c;猫咪又迎来了换毛期。这段时间我撸猫都不敢用力&#xff0c;随便摸摸就能带下满手的毛发&#xff0c;都可以做成毛毡了。我家猫还贼活泼&#xff0c;每天下班扑向我&#xff0c;还没能来得及换衣服&#xff0c;又收获一身满满的猫…

IC开发——数字电路设计简介

1. 前言 我们说的数字电路&#xff0c;一般是指逻辑数字电路&#xff0c;即通过逻辑门组合成的电路&#xff0c;也即我们常说的逻辑IC。IC除了逻辑IC之外&#xff0c;还有模拟IC&#xff0c;存储IC等。 IC设计&#xff0c;需要学习数字电路&#xff0c;需要学习Verilog/VHDL等…

TypeError: Cannot read properties of undefined (reading ‘offsetHeight’)

TypeError: Cannot read properties of undefined (reading ‘offsetHeight’) 前端报错 TypeError: Cannot read properties of undefined (reading offsetHeight)错误通常意味着你试图访问一个未定义或尚未渲染到DOM中的元素的offsetHeight属性。这个错误常见于异步数据处理、…

DAPLINK 之仿真调试器介绍

文章目录 前言1 协议1.1 JTAG 协议1.2 SWD 协议 2 调试仿真器2.1 ST-Link 仿真器2.2 ULink 仿真器2.3 J-Link 仿真器2.4 DAPLINK 仿真器 3 LINKer 搭配 CLion 的使用3.1 ST-Link CLion STM32F103RCT63.2 DAPLINK CLion STM32F103RCT6 参考 前言 本文算是 DAPLINK 学习的一个…

PyQt5 的 designer.exe 使用布局详解

文章目录 采用designer.exe原因一、打开 designer.exe二、界面布局介绍1. 菜单栏和工具栏2. 组件面板3. 窗体设计区域4. 属性编辑器5. 信号 / 槽编辑器 三、示例代码及图片展示 采用designer.exe原因 Python使用PyQt5界面开发为啥不使用py文件创建而是采用designer.exe原因&…

通过redis实现高性能计费处理逻辑

计费服务一般都是跟资金相关&#xff0c;所以它在系统中是非常核心的模块&#xff0c;要保证服务的高可用、事务一致性、高性能。服务高可用需要集群部署&#xff0c;要保证事务一致性可以通过数据库来实现&#xff0c;但是只通过数据库却很难实现高性能的系统。 这篇文章通过使…

人工智能——引领未来的科技革命

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活中不可或缺的一部分。从智能手机的语音助手到自动驾驶汽车&#xff0c;从智能家居到工业自动化&#xff0c;AI的应用正在不断拓展&#xff0c;其影响力也在持续增强。今天&#xff0c;我们将…

图像的两种结构

彩色图像数据 (color_image_data) 彩色图像数据是一个三维数组&#xff0c;其中每个维度分别对应&#xff1a; 高度&#xff1a;图像的行数。宽度&#xff1a;图像的列数。颜色通道&#xff1a;每个像素的颜色信息&#xff0c;通常为RGB三个通道。 例如&#xff0c;一个3x3像…

【进阶】面向对象之权限修饰符代码块

文章目录 权限修饰符权限修饰符的使用规则 代码块分类局部代码块(了解就行)构造代码块(了解就行)静态代码块(重点) 权限修饰符 权限修饰符的使用规则 成员变量私有方法公开 特例&#xff1a; 如果方法中的代码是抽取其他方法中共性代码&#xff0c;这个方法一般也私有. 代码…

智诊小助手TF卡记录文件导出

若想将TF卡中记录的数据文件导出可按以下的流程进行配置&#xff1a; 点击主界面中的导出选项即可进入到下图中TF卡应用界面 点击TF卡应用界面中“查看记录文件”的选项&#xff0c;进入导出文件界面。 …