0
点赞
收藏
分享

微信扫一扫

26,Android保活黑科技的技术实现

哈哈镜6567 2022-02-02 阅读 127

//广播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”;

QVector <QToolButton *> vToolBtn;

for(int i = 0; i < 9; i++)

{

//设置头像

QToolButton * btn = new QToolButton;

//设置文字

//btn->setText(“aaaaaaa”);

btn->setText(nameList[i]);

//设置头像

//btn->setIcon(QPixmap(":/images/ftbz.png"));

//设置头像

QString str = QString(":/images/%1.png").arg(iconNameList.at(i));

btn->setIcon(QPixmap(str));

//设置头像大小

btn->setIconSize(QPixmap(":/images/ftbz.png").size());

//设置按钮的风格 透明

btn->setAutoRaise(true);

//设置文字和图片一起显示

btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

//加到垂直布局中

ui->vLayout->addWidget(btn);

//将创建的button加入到容器中,保存储存的按钮

vToolBtn.push_back(btn);

//9个标示默认初始化

isShow.push_back(false);

}

//对9个按钮 进行添加信号槽

for(int i = 0 ; i < vToolBtn.size();i++)

{

connect(vToolBtn[i],&QToolButton::clicked,={

//如果被打开了,就不要再次打开

if(isShow[i])

{

QString str = QString("%1窗口已经被打开了").arg(vToolBtn[i]->text());

QMessageBox::warning(this,“警告”,str);

return;

}

isShow[i] = true;

//弹出聊天对话框

//构造聊天窗口时候 告诉这个窗口他的名字 参数1 顶层方式弹出 参数2 窗口名字

//注意! Widget构造函数 并没有这两个参数,需要重新写构造函数,增加一个新的参数QString name

Widget * widget = new Widget(0,vToolBtn[i]->text());

//设置窗口标题

widget->setWindowTitle(vToolBtn[i]->text());

widget->setWindowIcon(vToolBtn[i]->icon());

widget->show();

//监听窗口关闭的信息,发送者是widget发送的

connect(widget,&Widget::closeWidget,={

isShow[i] = false;

});

});

}

}

DialogList::~DialogList()

{
delete ui;
}

最后

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。

在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。需要的朋友可以私信我【资料】或者 点这里 免费领取

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 领取地址: Android学习PDF+架构视频+最新面试文档+源码笔记

g-h2eqFGlP-1643773049853)]

[外链图片转存中…(img-cZYZFyPR-1643773049853)]

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 领取地址: Android学习PDF+架构视频+最新面试文档+源码笔记

举报

相关推荐

0 条评论