基于Qt的相似QQ好友列表抽屉效果的实现
版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/shuideyidi/article/details/30619167
前段时间在忙毕业设计,所以一直没有更新博客。今天答辩完以后,将对我的毕业设计进行模块展示,供Qt刚開始学习的人进行參考。
毕业设计题目:Linux系统下基于Qt的局域网即时通信系统设计与实现
当中我有一个相似于QQ的好友列表,然后对好友能够进行分组管理,毕设中详细效果图例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1aWRleWlkaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
网上查寻到的设计思路:
1.採用QToolBox的方式,尽管看起来有点样子,可是并非我们所熟悉的好友列表,比方:http://blog.csdn.net/qianguozheng/article/details/6719074
缺点:(1):仅仅能显示某一组中的好友,不能同一时候显示多个分组中好友列表。
(2):必须显示某一组中的好友,不能够都隐藏。
2.採用QTreeView或者QListView的方式,个人感觉比較麻烦,所以一直没哟尝试过。之前也找过到一个博客是採用这个方式的,可是因为本人的粗心,如今找不到了。。
。
好了,介绍完别人的,接下来就是自己的了。
事实上我的方法非常easy。就是利用QLayout 布局以及 QWidget的setVisible()函数,控制显示。
#include <QVBoxLayout>
#include <QLabel>
class IMToolItem : public QWidget {
Q_OBJECT
public:
IMToolItem(const QString &title,
QWidget *parent = 0) : QWidget(parent), layout(new QVBoxLayout)
{
layout = new QVBoxLayout;
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(new QLabel(title));
setLayout(layout);
layout->setContentsMargins(0,0,0,0);
layout->setSpacing(0);
}
void addItem(QWidget *item)
{
m_itemList.append(item);
layout->addWidget(item);
item->setVisible(false);
}
protected:
void mousePressEvent(QMouseEvent *event)
{
for (int i=0; i<m_itemList.size(); ++i)
{
m_itemList[i]->setVisible(!m_itemList[i]->isVisible());
}
}
private:
QList<QWidget *> m_itemList;
QVBoxLayout *layout;
};
class IMToolBox : public QWidget {
Q_OBJECT
public:
IMToolBox(QWidget *parent = 0) : QWidget(parent), layout(new QVBoxLayout)
{
setLayout(layout);
layout->setContentsMargins(0,0,0,0);
layout->setSpacing(0);
}
void addItem(IMToolItem *item)
{
layout->addWidget(item);
}
private:
QVBoxLayout *layout;
};
这段代码不仅能够实现QQ好友列表的抽屉效果,还能支持非常多额外的拓展。。
可是是为读者提供一个思路,读者能够自由扩展,封装成自己的类,供自己使用。
假设仅仅要显示抽屉效果。IMToolItem这个类已经全然够用。
改日我会上传一个简单的demo供大家參考,也希望大家对不足之处进行批评指导,大家一起分享交流。互相学习。
================================================================================================================================
昨天因为太晚了。所以没有把demo提供给大家。
今天一大早起来,就将这个模块提取出来,写成了一个简单的demo供大家參考。
demo中效果图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1aWRleWlkaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
介绍:
点击分组title,能够显示或者隐藏整个分组内的好友;
当好友数量过多。操作显示范围,右側会出现滚动栏。
还有要说的就是,我认为对于QList<QWidget *> m_itemList的循环遍历,来控制显示隐藏不是非常合理。
能够直接把显示分组的标签label放在IMToolBox,将好友button放在IMToolItem中,然后直接控制IMToolItem的显示或者隐藏,应该也能够的。
基于Qt的相似QQ好友列表抽屉效果的实现的更多相关文章
- Windows UIA自动化测试框架学习--获取qq好友列表
前段时间应公司要求开发一款针对现有WPF程序的自动化测试工具,在网上查资料找了一段时间,发现用来做自动化测试的框架还是比较多的,比如python的两个模块pywinauto和uiautomation, ...
- iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)
iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...
- [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView
A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组 code so ...
- 仿QQ好友列表界面的实现
TableView有2种style:UITableViewStylePlain 和 UITableViewStyleGrouped. 但是QQ好友列表的tableView给人的感觉似乎是2个style ...
- ExpandableListView仿QQ好友列表
本例中,对ExpandableListView中的数据进行了封装,分为两个JavaBean,一个为Group类表示组信息,一个Child类表示该组下子列表信息: Group: public class ...
- (二十七)QQ好友列表的实现
QQ好友列表通过plist读取,plist的结构为一组字典,每个字典内有本组的信息和另外一组字典代表好友. 要读取plist,选择合适的数据结构,例如NSArray,然后调用initWithConte ...
- android 实现QQ好友列表
在某些Android开发群里,看到有些新手问怎么实现QQ好友列表,其实网上一搜挺多的.接触Android,也才一年的时间,大部分时间花在工作上(解bug...),界面上开发很少参与.自己维护的系统应用 ...
- swift 实现QQ好友列表功能
最近项目中有类似QQ好友列表功能,整理了一下,话不多说,直接上代码 import UIKit class QQFriend: NSObject { var name: String? var intr ...
- OS开发UI篇—使用UItableview完成一个简单的QQ好友列表
本文转自:http://www.cnblogs.com/wendingding/p/3763330.html 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableVi ...
随机推荐
- lnmp 优化
一,版本信息优化 重启 直接更改版本号: 在源码包里改 第二个要改的地方 第三个需要更改的 改完后编译安装,下次我直接写进编译脚本上
- BFC --- Block Formatting Context --- 块级格式化上下文
虽然知道块级格式化上下文是什么东西,但要我把这个东西给说清楚,还真的不是一件容易的事儿,所以这篇文章我就要说说清楚到底什么使传说中的BFC,即块级格式化上下文. 一.BFC的通俗理解 通俗的理解 -- ...
- Oracle 角色及其权限
一.简介 Oracle权限分为系统权限和对象权限. 1.系统权限 注意:系统权限不支持级联回收,所以你需要使用sysdba一个个的回收. 2.对象权限 注:对象权限支持级联回收,系统权限不支持级联回收 ...
- [转]ClassPath是什么
from: https://my.oschina.net/GivingOnenessDestiny/blog/603505 classpath 是什么classpath实际上就是编译后的 以 clas ...
- 《Unity系列》Json文件格式的解析——初级教程
Json作为轻量级的数据交换格式,被广泛应用于网络数据传输中.相关的解析工具层出不穷,一般掌握一个工具的应用其他的相应工具就能立马学会. 这里以C#中的LitJson为例给大家示范一下解析工具的用法. ...
- 06.FileStream类的学习
//FileStream类是用来操作字节的,也就是可以操作所有文件. 因为所有的文件都是以字节形式来存储的. //StreamReader类和StreamWriter类是用来操作字符的. FileSt ...
- 多线程TCP的socket通信
应用多线程来实现服务器与多客户端之间的通信. 基本步骤: 1.服务器端创建ServerSocket,循环调用accept()等待客户端的连接 2.客户端创建一个socket并请求和服务器端的连接 3. ...
- 抽象工厂模式&简单工厂模式
抽象工厂模式 优点: 如IFactory factory=new AccessFactory(),在一个应用中只需要初始化一次,这就使得改变应用的时候变得非常容易:其次它让具体的创建实例过程与客户端分 ...
- 前端自动分环境打包(vue和ant design)
现实中的问题:有时候版本上线的时候,打包时忘记切换环境,将测试包推上正式服务器,那你就会被批了. 期望:在写打包的命令行的时候就觉得自己在打包正式版本,避免推包时候的,不确信自己的包是否正确. 既然有 ...
- Java程序员应该知道的linux命令
1.查看Java进程:ps -ef|grep java,ps auxf|grep jva; 2.杀死所有Java进程: pkill java, kill -9 进程ID: 3.进入目录:cd /usr ...