版权声明:本文为博主原创文章。未经博主同意不得转载。 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的显示或者隐藏,应该也能够的。

 

下载链接:http://download.csdn.net/detail/shuideyidi/7496831

基于Qt的相似QQ好友列表抽屉效果的实现的更多相关文章

  1. Windows UIA自动化测试框架学习--获取qq好友列表

    前段时间应公司要求开发一款针对现有WPF程序的自动化测试工具,在网上查资料找了一段时间,发现用来做自动化测试的框架还是比较多的,比如python的两个模块pywinauto和uiautomation, ...

  2. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  3. [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

    A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组   code so ...

  4. 仿QQ好友列表界面的实现

    TableView有2种style:UITableViewStylePlain 和 UITableViewStyleGrouped. 但是QQ好友列表的tableView给人的感觉似乎是2个style ...

  5. ExpandableListView仿QQ好友列表

    本例中,对ExpandableListView中的数据进行了封装,分为两个JavaBean,一个为Group类表示组信息,一个Child类表示该组下子列表信息: Group: public class ...

  6. (二十七)QQ好友列表的实现

    QQ好友列表通过plist读取,plist的结构为一组字典,每个字典内有本组的信息和另外一组字典代表好友. 要读取plist,选择合适的数据结构,例如NSArray,然后调用initWithConte ...

  7. android 实现QQ好友列表

    在某些Android开发群里,看到有些新手问怎么实现QQ好友列表,其实网上一搜挺多的.接触Android,也才一年的时间,大部分时间花在工作上(解bug...),界面上开发很少参与.自己维护的系统应用 ...

  8. swift 实现QQ好友列表功能

    最近项目中有类似QQ好友列表功能,整理了一下,话不多说,直接上代码 import UIKit class QQFriend: NSObject { var name: String? var intr ...

  9. OS开发UI篇—使用UItableview完成一个简单的QQ好友列表

    本文转自:http://www.cnblogs.com/wendingding/p/3763330.html 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableVi ...

随机推荐

  1. Intellij IDEA 添加项目依赖

    https://blog.csdn.net/TaooLee/article/details/51305443 idea导入一个maven项目 https://blog.csdn.net/qq_3837 ...

  2. jackson工具类有动态属性过虑功能

    在业务应用中经常会有指定属性序列化json的需求,C#中这个功能很容易就可以解决:使用lambda重新构造一下匿名对象就可以了.一行代码搞定.java是这样解决的. public JsonMapper ...

  3. flask综合整理2

    session功能 首先我们知道session可以理解是一把钥匙,它存在在服务器上,其实在flask中也有session 1.系统自带的session from flask import sessio ...

  4. flask综合整理1

    前言: 框架的对比 Django:1个重武器,包含了web开发中常用的功能.组件的框架:(ORM.Session.Form.Admin.分页.中间件.信号.缓存.ContenType....): To ...

  5. 4.net两种交互模式

    .net两种交互模式 (1) C/S:客户端(Client)/服务器模式(Server) (2) B/S:浏览器(Browser)/服务器模式(Server)   来自为知笔记(Wiz)

  6. SOAP介绍,为学习WCF做准备

    SOAP 1.什么是SOAP? 答:简单对象访问协议是交换数据的一种协议规范,是一种轻量的.简单的.基于XML的协议, 它被设计成在WEB上交换结构化的和固化的信息.WebService的三要素 SO ...

  7. python中操作列表

    1.遍历列表 可以用for循环遍历打印非常实用 摸板: for 临时变量 in 列表 : print(临时变量) 注意缩进 , 注意冒号 2.创建数值列表 (1)使用range()函数 , 函数的范围 ...

  8. 位运算(6)——Number Complement

    Given a positive integer, output its complement number. The complement strategy is to flip the bits ...

  9. 002Angular2工程目录解构

    |--my-app 工程名 |--e2e 端到端测试 |--node_modules package.json列出的第三方模块放在此处 |--src |--app |--app.component.c ...

  10. python 按值排序

    转自:http://www.cnpythoner.com/post/266.html,感谢分享! python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需 ...