• 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功能持续更新中......

    
    
    
  • 相关阅读:
    MFC listcontrol 分列 添加行数据 点击列头排序
    MFC 设置控件事件对应的函数
    MFC CString to char* (Visual Studio 2015 亲测可用)
    MFC MessageBox AfxMessageBox
    iOS 注意事项
    iOS instancetype or id ?
    iOS Aspect Fit,Aspect Fill,Scale To Fill
    iOS UIImageView用代码添加点击事件
    iOS 安装Cocoapods以及安装第三方库的操作流程
    iOS 获取当前用户的用户路径并写入文件
  • 原文地址:https://www.cnblogs.com/whitewn/p/6839331.html
Copyright © 2020-2023  润新知