25,Android工程师跳槽经验分享

#include

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

Q_OBJECT

//分别代表 聊天信息、新用户加入、用户退出

enum MsgType {Msg,UsrEnter,UsrLeft};

public:

explicit Widget(QWidget *parent, QString name);

~Widget();

private:

Ui::Widget *ui;

signals:

//关闭窗口发送关闭信息

void closeWidget();

public:

//关闭事件

void closeEvent(QCloseEvent *);

public:

void sndMsg(MsgType type); //广播UDP消息

void usrEnter(QString user

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

name);//处理新用户加入

void usrLeft(QString usrname,QString time); //处理用户离开

QString getUsr(); //获取用户名

QString getMsg(); //获取聊天信息

private:

QUdpSocket * udpSocket; //udp套接字

qint16 port; //端口

QString uName; //用户名

void ReceiveMessage(); //接受UDP消息

};

#endif // WIDGET_H

widget.cpp

#include “widget.h”

#include “ui_widget.h”

#include

#include

#include

Widget::Widget(QWidget *parent, QString name) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

//初始化操作

udpSocket = new QUdpSocket(this);

//用户名获取

uName = name;

//端口号

this->port = 9999;

//绑定端口号 绑定模式 共享地址,断线重连

udpSocket->bind(this->port,QUdpSocket::ShareAddress |QUdpSocket::ReuseAddressHint);

//发送新用户进入

sndMsg(UsrEnter);

//点击发送按钮发送消息

connect(ui->sendBtn,&QPushButton::clicked,={

sndMsg(Msg);

});

//监听别人发送的数据

connect(udpSocket,&QUdpSocket::readyRead,this,&Widget::ReceiveMessage);

}

//接受UDP的消息

void Widget::ReceiveMessage()

{

//拿到数据报文

//获取长度

qint64 size = udpSocket->pendingDatagramSize();

QByteArray array = QByteArray(size,0);

udpSocket->readDatagram(array.data(),size);

//解析数据

//第一段 类型 第二段 用户名 第三段 内容

QDataStream stream (&array,QIODevice::ReadOnly);

int msgType; //读取到类型

QString usrName;

QString msg;

//获取当前时间

QString time = QDateTime::currentDateTime().toString(“yyyy-MM-dd hh:mm:ss”);

stream >>msgType;

switch (msgType) {

case Msg: //普通聊天

stream >> usrName >> msg;

//最加聊天记录

ui->msgBrowser->setTextColor(Qt::blue);

ui->msgBrowser->append("[" + usrName + “]” + time);

ui->msgBrowser->append(msg);

break;

case UsrEnter:

// stream >> usrName;

//usrEnter(usrName);

break;

case UsrLeft:

//stream >> usrName;

// usrLeft(usrName,time);

break;

default:

break;

}

}

//广播UDP消息

void Widget::sndMsg(MsgType type)

{

//发送的消息分为三种数据类型

//发送的数据 做分段处理 第一段:类型 第二段:用户名 第三段 具体内容

QByteArray array;

QDataStream stream(&array, QIODevice::WriteOnly);

stream << type << getUsr() ; //第一段内容 添加到流中 第二段 用户名

switch(type){

case Msg://发送普通消息

if(ui->msgTxtEdit->toPlainText() == “”) //判断如果用户没有输入内容,不发任何消息

{

QMessageBox::warning(this,“警告”,“发送内容不能为空”);

return ;

}

//第三段数据,具体说的话

stream <<getMsg();

break;

case UsrEnter://发送新用户进入的消息

break;

case UsrLeft://发送用户离开的消息

break;

default:

break;

}

//书写报文

udpSocket->writeDatagram(array, QHostAddress::Broadcast, port);

}

//获取到用户名

QString Widget::getUsr()

{

return this->uName;

}

//获取聊天信息

QString Widget::getMsg()

{

QString str = ui->msgTxtEdit->toHtml();

//清空输入框

ui->msgTxtEdit->clear();

ui->msgTxtEdit->setFocus();

return str;

}

//重写关闭窗口的事件

void Widget::closeEvent(QCloseEvent * e)

{

emit this->closeWidget();

//sndMsg(UsrLeft);

//断开套接字

//udpSocket->close();

//udpSocket->destroyed();

QWidget::closeEvent(e);

}

Widget::~Widget()

{

delete ui;

}

dialoglist.h

#ifndef DIALOGLIST_H

#define DIALOGLIST_H

#include

namespace Ui {

class DialogList;

}

class DialogList : public QWidget

{

Q_OBJECT

public:

explicit DialogList(QWidget *parent = 0);

~DialogList();

private:

Ui::DialogList *ui;

QVector< bool> isShow;

};

#endif // DIALOGLIST_H

dialoglist.cpp

#include “dialoglist.h”

#include “ui_dialoglist.h”

#include

#include “widget.h”

#include

DialogList::DialogList(QWidget *parent) :

QWidget(parent),

ui(new Ui::DialogList)

{

ui->setupUi(this);

//设置标题

setWindowTitle(“MyChat”);

//设置图标

setWindowIcon(QPixmap(":/images/qq.png"));

//准备图标

QListnameList;

nameList << “aaaaaa1111” << “aaaaaa2222” <<“aaaaaa3333”<<“aaaaaa4444”<<“aaaaaa5555”

<<“aaaaaa6666”<<“aaaaaa7777”<<“aaaaaa8888”<<“aaaaaa9999”;

QStringList iconNameList; //图标资源列表

iconNameList << “ftbz”<< “ymrl” <<“qq” <<“Cherry”<< “dr”

<<“jj”<<“lswh”<<“qmnn”<<“wy”;

上一篇:QAxWidget


下一篇:Qt中的事件学习