#include "softeem.h"
#include "ui_softeem.h"
#include <QIcon>
#include <ipmsg.h>
#include <QDebug>
#include <QTextCodec>
#include <QTextCursor>
Softeem::Softeem(QWidget *parent) :
QWidget(parent),
ui(new Ui::Softeem)
{
ui->setupUi(this);
map = new QMap<QString,Dialog *>();
smap = new QMap<QString,QString>();
udpsocket = new QUdpSocket(this);
udpsocket->bind(QHostAddress("192.168.0.172"),2425);
// udpsocket->bind(QHostAddress::Any,2425);
menu = new QMenu(this);
QAction *sendaction = new QAction(tr("发送消息"),this);
QAction *fileaction = new QAction(tr("发送文件"),this);
QAction *reflash = new QAction(tr("刷新列表"),this);
menu->addAction(sendaction);
menu->addAction(fileaction);
menu->addAction(reflash);
item = new QTreeWidgetItem();
item->setText(0,tr("我的好友"));
ui->friendsList->topLevelItem(0);
ui->friendsList->addTopLevelItem(item);
QIcon icon(":/new/prefix1/icon/friend1.ico");
trayicon = new QSystemTrayIcon(icon,this);
QMenu *traymenu = new QMenu(this);
QAction *showaction = new QAction(tr("显示主窗体"),this);
QAction *closaction = new QAction(tr("关闭主窗体"),this);
traymenu->addAction(showaction);
traymenu->addAction(closaction);
trayicon->setContextMenu(traymenu);
trayicon->setToolTip(tr("飞鸭传书"));
ui->friendsList->installEventFilter(this);
this->setWindowTitle(tr("飞鸭传书BY孙昌顺"));
this->setWindowIcon(icon);
connect(trayicon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(trayicon_activated(QSystemTrayIcon::ActivationReason)));
connect(showaction,SIGNAL(triggered()),this,SLOT(showaction_triggered()));
connect(closaction,SIGNAL(triggered()),this,SLOT(closaction_triggered()));
connect(reflash,SIGNAL(triggered()),this,SLOT(reflash_triggered()));
//发送上线消息
QString onlinemsg = "1_lbt4_10#65664#002481627512#0#0#0:1289671407:孙昌顺:飞鸭传书:%1:%2";
onlinemsg = onlinemsg.arg((int)IPMSG_BR_ENTRY).arg("孙昌顺");
qDebug()<<QHostAddress::Broadcast;
udpsocket->writeDatagram(onlinemsg.toAscii(),QHostAddress::Broadcast,2425);
connect(udpsocket,SIGNAL(readyRead()),this,SLOT(recvMsg()));
}
Softeem::~Softeem()
{
delete ui;
}
void Softeem::closeEvent(QCloseEvent * e){
if(!this->isHidden()){
trayicon->show();
this->hide();
e->ignore();
}
}
void Softeem::reflash_triggered(){
}
void Softeem::trayicon_activated(QSystemTrayIcon::ActivationReason reason){
if(reason == QSystemTrayIcon::DoubleClick){
this->show();
trayicon->hide();
}
}
void Softeem::showaction_triggered(){
this->show();
trayicon->hide();
}
void Softeem::closaction_triggered(){
this->close();
QString onlinemsg = "1_lbt4_10#65664#002481627512#0#0#0:1289671407:孙昌顺:飞鸭传书:%1:%2";
onlinemsg = onlinemsg.arg((int)IPMSG_BR_EXIT).arg("孙昌顺");
udpsocket->writeDatagram(onlinemsg.toAscii(),QHostAddress::Broadcast,2425);
}
bool Softeem::eventFilter(QObject * obj, QEvent * e){
if(obj==ui->friendsList){
if(e->type()==QEvent::ContextMenu){
if(ui->friendsList->selectedItems().at(0)->childCount()==0){
QMouseEvent *mouse = static_cast<QMouseEvent *>(e);
menu->popup(mouse->globalPos());
}
}
}
return QWidget::eventFilter(obj,e);
}
void Softeem::on_friendsList_itemDoubleClicked(QTreeWidgetItem* item, int column)
{
if(item->childCount()==0){
ip = item->text(column);
QString rip = ip.mid(0,ip.indexOf("|"));
if(map->count(rip)==0){
Dialog *d = new Dialog(ip,smap,udpsocket);
map->insert(rip,d);
}
map->value(rip)->show();
}
}
void Softeem::recvMsg(){
QIcon icon1(":/new/prefix1/icon/friend3.ico");
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
while(udpsocket->hasPendingDatagrams()){
QByteArray datagram;
QHostAddress toaddress;
datagram.resize(udpsocket->pendingDatagramSize());
udpsocket->readDatagram(datagram.data(),datagram.size(),&toaddress);
QString userinfo(datagram.data());
int start = userinfo.indexOf(":6291459:");
if(start!=-1){
if(!list.contains(toaddress.toString())){
QString username = userinfo.mid(start+9);
QTreeWidgetItem *item1 = new QTreeWidgetItem();
item1->setText(0,toaddress.toString().append("|").append(username));
item1->setIcon(0,icon1);
item->addChild(item1);
if(map->count(toaddress.toString())==0){
QString msg;
Dialog *d = new Dialog(toaddress.toString().append("|").append(username),smap,udpsocket);
map->insert(toaddress.toString(),d);
smap->insert(toaddress.toString(),msg);
}
list.append(toaddress.toString());
// qDebug()<<toaddress.toString()<<"\t"<<datagram.data();
}
}
int wstart = userinfo.indexOf(":288:");
if(wstart!=-1){
qDebug()<<toaddress.toString()<<"\t288"<<"\t"<<datagram.data();
QString rip = toaddress.toString();
QHostAddress toAddress(rip);
QString remsg = "1_lbt4_10#65664#002481627512#0#0#0:1289671407:孙昌顺:飞鸭传书:33";
QString fromMsg = datagram.mid(wstart+5,wstart+5-datagram.indexOf("{"));
if(fromMsg.trimmed().compare("")!=0&&fromMsg.trimmed().compare("\r\n")!=0){
fromMsg = fromMsg.prepend("\n").prepend(":").prepend(rip);
if(smap->count(rip)==0){
QString msg(fromMsg);
smap->insert(rip,msg);
}else{
fromMsg = QString(smap->value(rip)).append("\n").append(fromMsg);
smap->insert(rip,fromMsg);
}
if( map->value(rip)->isHidden()){
map->value(rip)->show();
}
map->value(rip)->uEdit->setText(fromMsg);
map->value(rip)->uEdit->moveCursor(QTextCursor::End);
udpsocket->writeDatagram(remsg.toAscii(),toAddress,2425);
}
}
}
}
QT 使用飞秋协议与飞秋通信源码
4星 · 超过85%的资源 需积分: 43 117 浏览量
2011-06-08
11:47:46
上传
评论 10
收藏 451KB ZIP 举报
shunshun20520
- 粉丝: 9
- 资源: 12
最新资源
- Python大作业:音乐播放软件(爬虫+可视化+数据分析+数据库)
- 课程设计-python爬虫-爬取日报,爬取日报文章后存储到本地,附带源代码+课程设计报告
- 软件和信息技术服务行业投资与前景预测.pptx
- 课程设计-基于SpringBoot + Mybatis+python爬虫NBA球员数据爬取可视化+源代码+文档+sql+效果图
- 软件品质管理系列二项目策划规范.doc
- 基于TensorFlow+PyQt+GUI的酒店评论情感分析,支持分析本地数据文件和网络爬取数据分析+源代码+文档说明+安装教程
- 软件定义无线电中的模拟电路测试技术.pptx
- 软件开发协议(作为技术开发合同附件).doc
- 软件开发和咨询行业技术趋势分析.pptx
- 软件测试题详解及答案.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
- 6
前往页