基于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 ...
随机推荐
- Web API 解决跨域问题
一.跨域问题的由来 同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容. 正是由于这个原因,我们不同项目之间的调用就会被浏览器阻 ...
- linux 7.0+救援模式
输入“e”进入GRUB页面! 定位到ro 然后修改ro为rw,并添加如下红框内的命令行! 使用下面的提示使用“Ctrl-x”start!!! 进入系统后,其实只是进入了一个安全模式下的内存系统,并不是 ...
- rancher2.X搭建k8s集群平台
一, 新版特性 Rancher 1.6支持多种容器编排框架,包括Kubernetes.Mesos.Docker Swarm,默认的基础编排引擎是Cattle,Cattle极简的操作体验受到了大量开源社 ...
- JUnit异常断言
使用Junit时,有多种方式来进行异常的断言 ExeceptedException & @Rule,可以同时断言异常类型和消息 public class ExpectedExceptionsT ...
- pulic——功能性(自己写完测试的)
一. 构建一个数组[“00:00”,"00:05"..."23:55"]的数组 function buildAxis(){ var ary=[]; ary.pu ...
- 给python解释器本身添加注册表
import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.pr ...
- 遇见phpDesigner我笑了 PHP开发利器
phpDesigner实在太好用了 相信许多PHP同胞谈到PHP开发工具的时候,都会想到Zend Studio.Eclipse等开发工具,这些工具的确非常的强大强悍,但复杂的配置满屏幕的英文并不适合所 ...
- postgres formencode.api.Invalid
错误提示: Invalid: expected an int in the IntCol 'geom', got <type 'str'> '010100000007EBFFFC3A611 ...
- 用js语句控制css样式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- MVC中提交表单的4种方式
一,MVC HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm ...