主窗口的设计与开发(二)

主窗口的设计与开发(二)

前言

        在上一集当中,我们完成了主窗口的初始化,主窗口包括了左中右三个区域。我们还完成了对左窗口的初始化,左窗口包括了用户头像、会话标签页按钮、好友标签页按钮以及好友申请标签页按钮。对于切换每个标签页,我们还做了初始化信号槽的内容。最后我们将整个MainWidget类设置为单例模式。

        那么这一集我们将继续完成主窗口的设计与开发,这一集我们要去完成中间区域的布局。

需求分析

        我们理想状态下的中间区域应该形如以下图片。

我们需要有一个搜索框,一个按钮,下面就是所有的会话信息,当会话过多,会生成一个滚轮。

需求大致是这样的一个需求。

initMidWindow

void MainWidget::initMidWindow(){QGridLayout* layout = new QGridLayout();layout->setContentsMargins(0,20,0,0);layout->setSpacing(0);windowMid->setLayout(layout);searchEdit = new QLineEdit();searchEdit->setFixedHeight(30);searchEdit->setPlaceholderText("搜索");searchEdit->setStyleSheet("QLineEdit { border-radius: 5px; background-color: rgb(226,226,226); padding-left: 5px;}");addFriendBtn = new QPushButton();addFriendBtn->setFixedSize(30,30);addFriendBtn->setIcon(QIcon(":/resource/image/cross.png"));QString style = "QPushButton { border-radius: 5px; background-color: rgb(226,226,226); }";style += "QPushButton:pressed { background-color: rgb(240,240,240); }";addFriendBtn->setStyleSheet(style);SessionFriendArea* sessionFriendArea = new SessionFriendArea();//控制搜索框和按钮的边距//创建空白widget填充布局管理器QWidget* spacer1 = new QWidget();spacer1->setFixedWidth(10);QWidget* spacer2 = new QWidget();spacer2->setFixedWidth(10);QWidget* spacer3 = new QWidget();spacer3->setFixedWidth(10);layout->addWidget(spacer1,0,0);layout->addWidget(searchEdit,0,1);layout->addWidget(spacer2,0,2);layout->addWidget(addFriendBtn,0,3);layout->addWidget(spacer3,0,4);layout->addWidget(sessionFriendArea,1,0,1,5);}

这里我们还是选择将距离设置为0,这里的SessionFriendArea类是我们需要写的一个新类,这个新类我们在后面再讲。可以看到我们还设置了三个空白的widget,由于我们的布局的距离设置为0,我们需要用三个空白的widget填充到整个窗口上让整个中间区域的布局更加美观。

SessionFriendArea

我们也是直接来看这个类

SessionFriendArea::SessionFriendArea(QWidget *parent): QScrollArea {parent}
{/*** 滚动条设置*///开启滚动this->setWidgetResizable(true);//垂直滚动条this->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 2px; background-color: rgb(46,46,46);}");//水平滚动条this->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal { height: 0px; }");/*** 创建widget*/container = new QWidget();container->setFixedWidth(195);this->setWidget(container);/*** 制定布局管理器*/QVBoxLayout* layout = new QVBoxLayout();layout->setContentsMargins(0,0,0,0);layout->setSpacing(0);layout->setAlignment(Qt::AlignTop);container->setLayout(layout);}

这个类的逻辑是十分的简单的。我们需要为这个QScrollArea开启滚动,之后添加两条滚动条,我们这里的垂直滚动条是显示出来的,水平的滚动条我们就不显示他。我们需要添加一个widget!当后续container的长度大于QScrollArea,就能够触发滚动效果。

那我们来测试以一下

在该代码底下添加一段代码

for(int i = 0; i < 66; i++){QPushButton* btn = new QPushButton();btn->setText("你好靓仔");layout->addWidget(btn);}

我们就可以看到这个整个的会话列表。那么这一集我们已经完成了中间区域的搜索框,按钮,以及滚动效果。那么下一集我们将会开始完成会话好友区的内容。

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

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

相关文章

【英语】前缀 与 后缀

文章目录 前言一、表示否定二、表示方向1. 表示 "前"2. 表示 "后"&#xff0c;"回"3. 低&#xff0c;下4. 高&#xff0c;上&#xff0c;超出&#xff0c;向外5. 表示 “内” 总结参考文献 前言 进行英语前后缀的复习 一、表示否定 a-, ab- amo…

机器学习模型中的因果关系:引入单调约束

单调约束是使机器学习模型可行的关键&#xff0c;但它们仍未被广泛使用欢迎来到雲闪世界。 碳ausality 正在迅速成为每个数据科学家工具包中必不可少的组成部分。 这是有充分理由的。 事实上&#xff0c;因果模型在商业中具有很高的价值&#xff0c;因为它们为“假设”情景提…

【详解 Java 注解】

前言&#xff1a; 注解&#xff08;Annotation&#xff09;是Java中的一种特殊符号&#xff0c;用来为代码提供额外的信息。它不会改变程序的逻辑&#xff0c;只是用来给编译器或工具提供指示。例如&#xff0c;Override 表示一个方法是重写了父类的方法&#xff0c;Deprecated…

# AI企业是否会被国有化?——基于SB 1047法案的讨论与Anthropic创始人Dario Amodei访谈分析

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;政府、企业和公众逐渐认识到AI的潜在影响力&#xff0c;尤其是在国家安全、经济竞争力以及社会变革等方面。近日&#xff0c;Anthropic创始人Dario Amodei在一档访谈中深入探讨了AI产业的未来发展&#xff0c…

python 中使用tkinter构建一个图片的剪切器-附源码

由于项目需要&#xff0c;需要构建一个间的软件&#xff0c;方便查看图片的剪切的位置&#xff0c;并对其中的图像进行分析&#xff0c;实现如下的功能 简单的UI加载图片剪切图片显示剪切后的图片 针对图片的内容进行识别 图片质量分析 前端的具体代码如下&#xff0c; 有需…

频谱分析仪和人工电源网络

安泰小课堂里面有详细的频谱分析仪的教程&#xff0c;可以学习&#xff1a; 【快速上手实操秘籍|频谱分析仪超详细基础操作|建议收藏】https://www.bilibili.com/video/BV1Wu4y197LW?vd_source3cc3c07b09206097d0d8b0aefdf07958 、、、、、、、、、、、、、、、、、、、、、…

Java 面试题:通过JProfile排查OOM问题 内存溢出与内存泄漏问题 --xunznux

文章目录 如何通过JProfile排查OOM或内存泄漏问题1、启动工具观测程序执行状态2、使用默认设置采样3、查看memory&#xff0c;Run GC无效4、查看 Live Memory发现两个byte大数组存在5、通过快照查看堆中的内存使用情况6、找到Full GC无法清除的对象通过大对象列表定位内存泄漏问…

Linux-【组管理、权限管理、定时任务调度】

目录 前言 Linux组基本介绍 文件/目录 所有者 查看文件 所有者 修改文件所有者 文件/目录 所在组 修改文件/目录 所在组 其它组 改变用户所在组 权限的基本介绍 rwx权限 rwx作用到文件 rwx作用到目录 修改权限 第一种方式&#xff1a;、-、变更权限 第二种方式…

openwrt的旁路模式无法访问国内网站

防火墙: 常规设置-> 区域&#xff1a; lan-> wan :编辑 IP 动态伪装:勾选

关于 QImage原始数据格式与cv::Mat原始数据进行手码数据转换 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/141996117 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

久久公益节||“携手万顺叫车一起做公益”

99公益日是由腾讯公益联合多家公益组织、企业及社会各界爱心人士共同举办的年度大型公益活动。随着99公益日的到来&#xff0c;同悦社工诚挚地邀请了万顺叫车一起参与今年的公益活动&#xff0c;共同为社会公益事业贡献力量。 在本次公益倡导活动中&#xff0c;万顺叫车将发挥其…

无人机飞控之光流知识小结

要完成飞行器的定位&#xff0c;则必须要有位置的反馈数据。在户外&#xff0c;我们一般使用GPS作为位置传感器&#xff0c;然而&#xff0c;在室内&#xff0c;GPS无法使用&#xff0c;要完成定位功能&#xff0c;可以选用光流传感器。 本讲主要介绍如何通过下视摄像头估计飞…

AtCoder ABC 359 F 题解

本题要看出性质并进行验证&#xff0c;程序难度低。&#xff08;官方 Editorial 似乎没有写证明过程&#xff1f;难道是过于显而易见了吗…&#xff09; 题意 给你一个数组 a a a&#xff0c;对于一棵 n n n 个节点的树 T T T&#xff0c; d i d_i di​ 为每个节点的度&am…

Gitness 基础安装

文章目录 Docker 安装注册账户创建项目导入已有仓库配置 Github Token同步源代码仓库 官方链接 Gitness was the next step in the evolution of Drone, from continuous integration to source code hosting, bringing code management and pipelines closer together. Gitnes…

八、Maven总结

1.为什么要学习Maven&#xff1f; 2.Maven 也可以配华为云和腾讯云等。 3.IDEA整合Maven 4.IDEA基于Maven进行工程的构建 5.基于Maven进行依赖管理&#xff08;重点&#xff09; 6. Maven的依赖传递和依赖冲突 7. Maven工程继承和聚合 8.仓库及查找顺序

解决面板安装Node.js和npm后无法使用的问题

使用面板&#xff08;BT&#xff09;安装Node.js和npm后&#xff0c;可能会遇到如下问题&#xff1a;即使成功安装了Node.js和npm&#xff0c;服务器仍提示“未安装”&#xff0c;在命令行中使用 node -v 或 npm -v 也没有任何响应。这种问题通常是由于环境变量配置错误或路径问…

【Hot100】LeetCode—215. 数组中的第K个最大元素

目录 1- 思路快速选择 2- 实现⭐215. 数组中的第K个最大元素——题解思路 3- ACM实现 原题连接&#xff1a;215. 数组中的第K个最大元素 1- 思路 快速选择 第 k 大的元素的数组下标&#xff1a; int target nums.length - k 1- 根据 partition 分割的区间来判断当前处理方式…

使用Node-API进行线程安全开发

一、Node-API线程安全机制概述 Node-API线程安全开发主要用于异步多线程之间共享和调用场景中使用&#xff0c;以避免出现竞争条件或死锁。 1、适用场景 异步计算&#xff1a;如果需要进行耗时的计算或IO操作&#xff0c;可以创建一个线程安全函数&#xff0c;将计算或IO操作放…

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本&#xff0c;有图有真相&#xff1a; 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动&#xff1a;zram&#xff0c;我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑&#xff0c;完整梳理完这个逻辑将对Linux块设备驱…

旅拍景区收银系统+押金原路退回+服装租赁-SAAS本地化及未来之窗行业应用跨平台架构

一、景区旅拍一体化系统 序号系统说明1提成系统用于给照相馆介绍照相拉客的人自动计算提成2押金系统用于服装租赁&#xff08;汉服租赁&#xff09;&#xff0c;设备租赁 &#xff0c;支持押金原路退回3收银系统计算每天收银汇总&#xff0c;月度收银汇总&#xff0c;支出4提成…