当前位置: 首页 > 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;还有助于准确预测并制定…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...