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

选择好友窗口(三)

选择好友窗口(三)

前言

在前两集我们就完成了整个左半部分的内容了,那么我们这一集开始就要完成我们的选择好友窗口的右侧部分。

需求分析

我们要做出的效果如下图

可以看到我们整个布局是一个网格的布局,当然也可以做成一个垂直的布局,最顶上有一个选择联系人的Label,之后中间是一个滚动区域,这个滚动区域是一个垂直的布局,最底下是我们的完成按钮与取消按钮。可以看到这个布局还是比较简单的,不过要注意里面的不同的布局的区分。

右侧区域初始化

布局我们已经写过很多遍了,所以就直接看代码一遍过

void ChooseFriendDialog::initRight(QHBoxLayout *layout)
{//右侧布局管理器QGridLayout* gridLayout = new QGridLayout();gridLayout->setSpacing(10);gridLayout->setContentsMargins(20,0,20,20);layout->addLayout(gridLayout,1);//提示 LabelQLabel* tipLabel = new QLabel();tipLabel->setText("选择联系人");tipLabel->setFixedHeight(30);tipLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);tipLabel->setAlignment(Qt::AlignLeft | Qt::AlignCenter);tipLabel->setStyleSheet("QLabel { font-size: 16px; font-weight: 700; }");//滚动区QScrollArea* scrollArea = new QScrollArea();scrollArea->setWidgetResizable(true);scrollArea->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 2px; background-color: rgb(255,255,255); }");scrollArea->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal { height: 0px; }");scrollArea->setStyleSheet("QScrollArea { border: none; }");scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//滚动区域的QWidgetselectedContainer = new QWidget();selectedContainer->setObjectName("selectedContainer");selectedContainer->setStyleSheet("#selectedContainer { background-color: rgb(255,255,255); }");scrollArea->setWidget(selectedContainer);//创建container中的垂直布局QVBoxLayout* vlayout = new QVBoxLayout();vlayout->setSpacing(0);vlayout->setContentsMargins(0,0,0,0);vlayout->setAlignment(Qt::AlignTop);selectedContainer->setLayout(vlayout);//创建底部按钮QString style = "QPushButton { color: rgb(7,191,96); background-color: rgb(240,240,240); border: none; border-radius: 5px; }";style+="QPushButton:hover { background-color: rgb(220,220,220); } QPushButton:pressed { background-color: rgb(200,200,200); }";QPushButton* okBtn = new QPushButton();okBtn->setFixedHeight(40);okBtn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);okBtn->setText("完成");okBtn->setStyleSheet(style);QPushButton* cancelBtn = new QPushButton();cancelBtn->setFixedHeight(40);cancelBtn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);cancelBtn->setText("取消");cancelBtn->setStyleSheet(style);//添加到网格布局gridLayout->addWidget(tipLabel,0,0,1,9);gridLayout->addWidget(scrollArea,1,0,1,9);gridLayout->addWidget(okBtn,2,1,1,3);gridLayout->addWidget(cancelBtn,2,5,1,3);

再说一遍,一定要注意布局管理器之间的关系。

添加元素

为了测试我们的右侧区域,我们就还是需要构造一些假数据来放到里面去。

先来看看添加的函数,和之前的添加到左侧的函数时异曲同工之妙。

void ChooseFriendDialog::addSelectedFriend(const QString& userId, const QIcon &avatar, const QString &name)
{ChooseFriendItem* item = new ChooseFriendItem(this, userId, avatar, name, true);selectedContainer->layout()->addWidget(item);
}

有人可能发现了我们还传入了userId和这个Dialog的指针,这个到后面自有妙用,当然这些变量的添加并不是一开始就想得到的,都是需要后面需要适应新需求而添加而上。

添加以下代码即可

#if TEST_UIQIcon defaultAvatar(":/resource/image/defaultAvatar.png");for(int i = 0; i < 30; ++i){this->addSelectedFriend(defaultAvatar, "狱友" + QString::number(i));}
#endif

下一集我们就要讲一下点击左侧能够添加到右侧的功能,以及点击复选框能够删除右侧并取消左侧勾选的功能。

相关文章:

选择好友窗口(三)

选择好友窗口&#xff08;三&#xff09; 前言 在前两集我们就完成了整个左半部分的内容了&#xff0c;那么我们这一集开始就要完成我们的选择好友窗口的右侧部分。 需求分析 我们要做出的效果如下图 可以看到我们整个布局是一个网格的布局&#xff0c;当然也可以做成一个垂…...

【含文档】基于ssm+jsp的音乐播放系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…...

【C语言】动态内存开辟

写在前面 C语言中有不少开辟空间的办法&#xff0c;但是在堆上开辟的方法也就只有动态内存开辟&#xff0c;其访问特性与数组相似&#xff0c;但最大区别是数组是开辟在栈上&#xff0c;而动态内存开辟是开辟在堆上的。这篇笔记就让不才娓娓道来。 PS:本篇没有目录实在抱歉CSD…...

Redis缓存在thinkPHP/fastAdmin框架中的应用

Redis缓存在thinkPHP/fastAdmin框架中的应用 引言 在现代Web开发中&#xff0c;性能优化是一个永恒的话题。随着用户数量的增加和业务逻辑的复杂化&#xff0c;如何提高应用的响应速度和处理能力成为了开发者们必须面对的挑战。缓存技术作为提升性能的有效手段之一&#xff0…...

Ceisum无人机巡检视频投放

公司投标内容有个视频投放的功能动画&#xff0c;原本想实现这么一个效果&#xff1a; 案例效果来自别人的展示作品&#xff0c;Leader一眼就相中了这个效果&#xff0c;可惜别人的终究是别人的&#xff0c;又不会白白给你&#xff0c;终究是要自己动手尝试。 动画方面的展示…...

分享几款开源好用的图片在线编辑,适合做快速应用嵌入

图片生成器是指一种工具或软件&#xff0c;用于自动生成图片或图像内容&#xff0c;通常依据用户设定的参数或模板进行操作。这种工具能够帮助用户快速创建视觉效果丰富的图像&#xff0c;而无需具备专业的设计技能。 在数字化时代&#xff0c;图片编辑已经成为日常工作和生活的…...

闪存学习_1:Flash-Aware Computing from Jihong Kim

闪存学习_1&#xff1a;Flash-Aware Computing from Jihong Kim 前言一、Storage Media&#xff1a;NAND Flash Memory1、概念2、编程和擦除操作3、读操作4、异地更新操作&#xff08;Out-Place Update&#xff09;5、数据可靠性6、闪存控制器&#xff08;SSD主控&#xff09;7…...

如何将本地项目上传至Gitee仓库(详细教程)

前提条件 1、本地电脑安装Git客户端 2、本地已有项目 3、Gitee注册好了账户 如果没有安装Gitee 可以区菜鸟查看一下安装教程 Git教程https://www.runoob.com/git/git-tutorial.html 操作示例 前提条件已经准备好的情况下登录gitee 码云 https://gitee.com 点解右侧加号 新…...

redis详细教程(3.hash和set类型)

hash Redis中的Hash是一种数据结构&#xff0c;用于存储键值对集合。在Redis中&#xff0c;Hash非常适合表示对象&#xff0c;其中对象的每个字段都对应一个键值对。以下是关于Redis中Hash的详细讲解&#xff1a; 特点&#xff1a; 1. 键值对集合&#xff1a;Hash是一个包含…...

性能测试详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始&#xff0c;到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点…...

修改ruoyi的logo和标题

1、修改网页标签上的图标和标题 静态修改 标签页上的 图标 直接替换public/favicon.ico文件为你自己的图标文件 如果你的图标文件名不是favicon.ico&#xff0c;你还需要在public/index.html中相应地修改这一行&#xff0c;将/favicon.ico替换为你的图标文件路径。 静态修改…...

vue系列==vue3新语法

vue系列vue3新语法 1、setup组合式API入口函数 2、利用ref函数定义响应式数据 3、利用reactive函数定义响应式数据 1、setup组合式API入口函数 1、Vue3为组合式API提供了一个setup函数&#xff0c;所有组合式API函数都是在此函数中调用的&#xff0c;它是组合式API的使用入口…...

001-Kotlin界面开发之Jetpack Compose Desktop学习路径

Compose Desktop学习之路 学习过程 理解Kotlin的基本语法 Compose Desktop采用Kotlin构建&#xff0c;因此对Kotlin的基本语法有很好的理解是必不可少的。你可以从官方的Kotlin文档开始。 用一句话概括&#xff0c;Kotlin是一种现代的、静态类型的编程语言&#xff0c;它结合…...

qt QStackedLayout详解

QStackedLayout类提供了一种布局方式&#xff0c;使得在同一时间内只有一个子部件&#xff08;或称为页面&#xff09;是可见的。这些子部件被维护在一个堆栈中&#xff0c;用户可以通过切换来显示不同的子部件&#xff0c;适合用在需要动态显示不同界面的场景&#xff0c;如向…...

python实现钉钉群机器人消息通知(消息卡片)

直接上代码 python """ 飞书群机器人发送通知 """ import time import urllib3 import datetimeurllib3.disable_warnings()class DingTalkRobotAlert():def __init__(self):self.webhook webhook_urlself.headers {Content-Type: applicatio…...

防火墙技术应用

目录 防火墙安全功能指标防火墙性能指标防火墙部署防火墙应用案例-Linux防火墙防火墙应用案例-华为包过滤防火墙ACL(基本)防火墙应用案例-工控防火墙部署 防火墙安全功能指标 我们防火墙也会提供各种各样的互联接口&#xff0c;它这种接口有以太网、快速以太网、千兆以太网&am…...

docker engine stopped

1&#xff09;环境&#xff1a;win 10 2&#xff09;docker安装时已经已经安装了虚拟机 3&#xff09;启用网络适配器 4&#xff09;启用docker服务&#xff08;依赖服务LanmanServer&#xff09; 5&#xff09;全都弄好了&#xff0c;docker还是打不开&#xff0c;没办法了&a…...

Redis- 内核的分配内存限制的警告“WARNING Memory overcommit must be enabled!”

文章目录 问题描述报错原因影响解决方案注意事项 问题描述 [rootredisxxx]# redis-sentinel ./sentinel.conf 19638:X 01 Nov 2024 16:57:27.180 # WARNING Memory overcommit must be enabled! Without it, background save or replication may fail under low memory condi…...

腾讯云在线扩容数据盘

文章目录 一、查询云硬盘使用的分区形式二、根据不同的云硬盘类型进行在线扩容分区2.1 安装 gdisk 工具。2.2 安装 growpart 工具使用 growpart 工具扩容分区 三、根据不同的云硬盘类型进行在线扩容文件系统3.1 扩容 EXT 文件系统3.2 扩容 XFS 文件系统 一、查询云硬盘使用的分…...

Time Travel Queries|在 RisingWave 中访问历史数据

对于许多组织来说&#xff0c;能够访问历史数据十分关键。以金融交易公司为例&#xff1a; 特定时间点的数据快照与合规审查、审计流程息息相关。企业的关键业务系统也依赖历史数据来恢复故障并重建系统。分析过去事件及其对当前状况的影响&#xff0c;还有助于准确预测并制定…...

LangChain4j-examples:基于Java的AI智能体工作流编排深度解析与实践指南

LangChain4j-examples&#xff1a;基于Java的AI智能体工作流编排深度解析与实践指南 【免费下载链接】langchain4j-examples 项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j-examples LangChain4j-examples是一个面向Java开发者的AI智能体工作流编排框…...

2026 年我作为资深工程师如何使用 LLM Agent:从副驾到主驾的真实工作流转变

从副驾到主驾&#xff0c;2026 年资深工程师的 LLM Agent 实战工作流&#xff1a;哪些交给 Agent&#xff0c;哪些必须自己做。 原文链接&#xff1a;AI 小老六 一年之差&#xff1a;Agent 从「勉强能用」变成了「几乎离不开」 2025 年初&#xff0c;行业里最强的推理模型还是…...

手把手教你用Wireshark(或类似工具)理解AMBA AXI总线上的数据流(以Cortex-A53为例)

实战解析&#xff1a;用Wireshark透视Cortex-A53的AXI总线数据流 在嵌入式系统开发中&#xff0c;AXI总线如同SoC的神经系统&#xff0c;承载着处理器核心与各功能模块间的关键通信。对于底层驱动工程师和FPGA开发者而言&#xff0c;能够直观观察总线上的数据流动&#xff0c;就…...

如何快速备份微信聊天记录:Mac用户的完整解决方案

如何快速备份微信聊天记录&#xff1a;Mac用户的完整解决方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾经因为误删重要微信聊天记录而懊恼不已&#xff1f…...

Geothermal Power Generation Global Market Trends 2026:地热发电为何正在成为新一轮能源工程竞争核心

观点&#xff5c;地热发电的竞争逻辑已经发生变化过去很多人认为地热发电属于区域性能源项目。但现在&#xff0c;行业真正变化的是&#xff1a;地热正在从“资源开发工程”&#xff0c;转向“稳定电力基础设施工程”。相比波动性较强的风电与光伏&#xff0c;地热发电最大的优…...

NY345固态MT29F32T08GWLBHD6-24T:B

NY345固态MT29F32T08GWLBHD6-24T:B在智能制造、交通控制、能源监测等关键领域&#xff0c;每一次写入与读取都决定着系统运行的可靠性。美光&#xff08;Micron&#xff09;MT29F32T08GWLBHD6-24T:B&#xff0c;以其32Tb大容量、工业级封装和多模式灵活切换&#xff0c;成为嵌入…...

告别文献混乱!用Zotero+OneDrive打造你的跨设备论文库(附ZotFile插件配置)

告别文献混乱&#xff01;用ZoteroOneDrive打造你的跨设备论文库 实验室电脑里躺着三百篇未分类的PDF&#xff0c;笔记本桌面堆满"新建文件夹(1)"&#xff0c;平板上还存着上周下载但找不到的会议论文——这可能是每个科研人的数字噩梦。当文献管理变成一场与自己的捉…...

Win11安全中心总弹警告?手把手教你揪出并删除那个‘捣乱’的内存完整性不兼容驱动

Win11安全中心频繁弹窗&#xff1f;三步精准定位并清除内存完整性冲突驱动 每次开机右下角那个黄色三角警告图标是不是让你血压飙升&#xff1f;Windows安全中心反复提醒"内存完整性已关闭"&#xff0c;点开一看又提示"驱动程序不兼容"。这种系统级的警告就…...

【公安基础知识】01

治安管理处罚- 行政处罚 治安管理处罚- 行政处罚概念特点处罚种类适用范围违反行为处罚程序立案&#xff08;旧 受案&#xff09;调查 &&&&&&&&&&&&&&&&&&&&&&&&&&&…...

2026年AI求职必看:掌握这3类岗位核心技能,年薪百万不是梦!收藏备用

本文分析了AI行业招聘市场的两极分化现象&#xff0c;并深入拆解了算法工程师、大模型应用开发、AI产品经理三类热门岗位的真实招聘要求和面试准备重点。文章指出&#xff0c;企业对AI人才的要求已从"会调模型"转向"能落地产品"&#xff0c;复合型人才需求…...