QQ界面及简单操作实现

主要功能:

1.实现QQ好友界面;

2.点击QQ好友图标,可以打开对应的聊天对话框;

说明:聊天对话框的界面即为上次所描述的UDP的实现界面,略有改动;

整体程序操作分析:

1.qq好友界面作为主操作界面,从数据类中添加好友头像,好友名字等信息,点击主操作界面上的好友,能够打开聊天对话框类;

2.添加好友头像,好友名字等信息的行为是相同的,建立一个新的类,只需要留出接口即可;

3.聊天对话框类中,好友信息不一致以外,聊天的连接是一致的,同样可以留出接口,建立新的类;

qq好友界面:

1.目前分组是固定的;

#include "drawer.h"
#include<QGroupBox>
#include<QVBoxLayout>
#include<QHBoxLayout>
#include<QPixmap>
#include<QIcon>
#include<QMouseEvent>
#include<perinfo.h>
#include<QDebug>
#include<mychat.h>
Drawer::Drawer()

{
    setWindowTitle("QQ");

    QGroupBox  *groupBox1=new QGroupBox;
    QVBoxLayout *layout1 =new QVBoxLayout(groupBox1);
    layout1->setMargin(10);
    layout1->setAlignment(Qt::AlignLeft);
    layout1->addWidget(Getmodecontain());//
    layout1->addWidget(Getmodecontain());
    layout1->addStretch();

    QGroupBox *groupBox2=new QGroupBox;
    QVBoxLayout *layout2=new QVBoxLayout(groupBox2);
    layout2->setMargin(10);
    layout2->setAlignment(Qt::AlignLeft);
    layout2->addWidget(Getmodecontain());
    layout2->addWidget(Getmodecontain());
    layout2->addStretch();

    QGroupBox *groupBox3=new QGroupBox;
    QVBoxLayout *layout3=new QVBoxLayout(groupBox3);
    layout3->setMargin(10);
    layout3->setAlignment(Qt::AlignLeft);
    layout3->addWidget(Getmodecontain());
    layout3->addWidget(Getmodecontain());
    layout3->addStretch();

    resize(256,512);
    this->addItem((QWidget*)groupBox1,QIcon("right.png"),"我的好友");
    this->addItem((QWidget*)groupBox2,QIcon("right.png"),"陌生人");
    this->addItem((QWidget*)groupBox3,QIcon("right.png"),"黑名单");

}

MyChat* Drawer:: showchat(int index)  //点击得到index,给MyChat类
 {
    qDebug()<<"showchat:::"<<index;
    MyChat *chatDialog = new MyChat;   //创建聊天对话框

    chatDialog->setPerInfo(lst->per.at(index));
    chatDialog->show();

    return chatDialog;

 }

perInfo* Drawer::Getmodecontain()   //创建好友(ToolButton)且写入相关信息
{

//    perList *lst=new perList;  //新建一个对象 ,lst中存放好友信息
       while(num_per<lst->perlist_size())
        {
           perInfo *person1=new perInfo;
          person1->setpersonMessage((lst->per).at(num_per)); //得到每个结构体中的内容

          // qDebug()<<lst->per.at(num_per).name;//显示查看信息
           connect(person1,SIGNAL(myclicked(int)),this,SLOT(showchat(int)));
          num_per++;
          return person1;
        }
       return 0;  //不能丢
}

perInfo是一个基于QToolButton的类, Drawer是主界面,成员函数Getmodecontain()是指从链表中获取好友数量,将好友对应的信息加载到perInfo(实质上是含有好友信息的QToolButton)中,每一个都是新建的,被添加到不同的位置,就形成了 上面的qq界面;

showchat(int index)是槽函数,对应点击好友操作;

2.perInfo类

#include "perinfo.h"
#include<QtDebug>
#include<QMouseEvent>
perInfo::perInfo()
{

}
void perInfo:: setpersonMessage(PersonMessage person)//给ToolButton写入参数
{
       {
           this->setText(person.name);
           this->setIcon((QPixmap(person.HeadImage)));
           this->setIconSize((QPixmap(person.HeadImage)).size());
           this->setAutoRaise(true);
           this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
       }
         index=person.numer;
}

void perInfo::mousePressEvent(QMouseEvent *e) // 点击动作
{

    if(e->button()==Qt::LeftButton)
    {
        qDebug()<<this->index;  //可以得到对应按钮的index,便于查看
    }
}

void perInfo::mouseReleaseEvent(QMouseEvent *e)  //发送
{
    if(e->button()==Qt::LeftButton)
    {
//        qDebug()<<this->index;  //可以得到对应按钮的index
       emit myclicked(index); //发送对应按钮的index
    }
}

成员函数 setpersonMessage(PersonMessage person)就是从链表中获取信息,写入ToolButton中;

咳咳,写文的功底还是木有提高,希望每次都能进步,将自己所学的,所想表达的描述清楚,哈哈!qq功能持续更新中......

				
时间: 2024-08-02 11:02:05

QQ界面及简单操作实现的相关文章

WPF—QQ界面(一):QQ界面的整体布局

15年6月底初学C#的WPF,在此之前对软件编程行业基本上相当于小白,从此漫漫程序路. 把C#的基本语法看了一遍,高级教程还没看,在师兄的提点下,开始尝试着写QQ的界面. 先将界面包含的各个效果分块写成随笔,期间遇到各种问题,要么请教师兄.同学,要么上网查阅大牛们写的博客(此后所有的文章中若有冒犯,请私信),如文中出现不当或者不够优化的代码,望广大博友积极指出,谢谢! 编译环境:windows 8.1 + VS2013 先上效果图: 整体布局我采用Grid来做,将整个界面分成9行(其中两行是空的

android实现仿QQ界面刷新

android实现仿QQ界面刷新 转载请注明出处:http://blog.csdn.net/wangpengfei_p/article/details/51420422 昨天想要实现一个下拉刷新的效果,本来想应该比较简单,因为之前在慕课网看见过类似的实现,记得是在listView里面添加footView或是添加headView,监听手指的点击滑动事件来控制view的显示或是隐藏,但是自己按照上面的代码来实现之后发现.这样做有一点不好的地方: 它判断是否刷新的依据是判断listView是不是滑动到

简单操作Zabbix安装配置与邮件报警(centos 7.4)

Zabbix官网下载地址:https://www.zabbix.com/download 实验拓扑:zabbix server端: 192.168.80.101 公网环境 centos 7.4 LAMP架构zabbix angent端: 192.168.80.102 公网环境 centos 7.4注:zabbix(音同 z?bix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix由2部分构成,zabbix server与可选组件zabbix agent

Apache Derby-02通过IJ简单操作DERBY

上回说到了Derby的历史以及需要准备的环境,这章将为大家介绍Apache Derby的简单操作 1.配置Derby环境 1.1去官网下载Derby_BIN并解压在文件夹中 http://mirrors.cnnic.cn/apache//db/derby/db-derby-10.12.1.1/db-derby-10.12.1.1-bin.zip 1.2如果需要在本地使用DERBY需要在系统变量中设置变量,derby是基于JAVA环境的所以在之前需要JAVA环境变量的配置 1.3 在系统变量创建D

【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级

文件重定向 #include<iostream> using namespace std; void main() { char str[30] = { 0 }; cin >> str; cout << str; system(str); cerr << "error for you"; cin.get(); cin.get(); } 键盘输入流 #include<iostream> #include <stdlib.h

数据分析软件及spss简单操作

数据分析软件介绍 SPSS统计软件      SPSS是英文Statistical package for the social science 的缩写,翻译成汉语是社会学统计程序包,20世纪60年代末由美国斯坦福大学的三位研究生研制,1975年在芝加哥组建SPSS总部.SPSS系统特点是操作比较方便,统计方法比较齐全,绘制图形.表格较有方便,输出结果比较直观.SPSS是用FORTRAN语言编写而成.适合进行从事社会学调查中的数据分析处理.最新版为13.0版.网址:http://www.spss

Linux学习笔记(四)---centos7系统安装后的一些简单操作

centos7系统安装后的一些简单操作 上次我们通过虚拟机已经安装完成CentOS7.重启系统后,进入登陆界面.系统登陆成功后,如下所示:我们虚拟机默认网络是使用NAT,这时我们仍无法使用网络.我们可以通过ifconfig查看一下,没有IP地址.注意ifconfig命令,必须是root用户才可以执行.我们使用dhclient命令,获取IP地址,然后再使用ifconfig查看.我们再检测一下网络是否可以用,ping一下百度网站,按ctrl+c中止命令.关于设置静态IP地址,后期再专门分享.再配置w

moloch1.8.0简单操作手册

moloch1.8.0简单操作手册 Sessions 页面:Sessions主要通过非常简单的查询语言来构建表达式追溯数据流量,以便分析. SPIView 页面: SPIGraph页面:SPIGraph 将以流量趋势图的方式展示指定字段的流量情况.除了直接在 SPIGraph 界面中选择字段,也可以在Sessions 及 SPIView 界面进行指定要查看的字段,通过 SPIGraph 选项跳转至本界面. Connections页面:Connections 用于直观的展示源节点与目的节点的关系.

ORACLE的安装与网页版创建表空间的简单操作以及PLsql的简单操作

1.oracle的安装: 安装简单易学,在这里不做解释.下载看装包后耐心等待,注意安装目录不要有中文字符,尽量按照指定目录进行安装.安装完成后会占用有大约5g的内存. 如果要卸载oracle,需要用其自带的卸载工具进行卸载[universal installer],然后删除注册表项,删除环境变量,删除目录并且重新启动计算机. 2.在网页版进行创建表空间: 进入网页版: 在电脑的服务中我们可以看到一共有7个oracle的服务项目,其中只有三个是正在启动中.这三项中,只有当OracleDBConso