#include "MyMessage.h"#include <string>#include "GBK.h"#include "osapi/osapi.h"#include "MyItemDraw.h"#include"SendFileDlg.h"#include <QFileDialog>MyMessage::MyMessage(QWidget *parent): QDialog(parent){ui.setupUi(this);//dlg对话框MessageDlg *dlg;//开启该界面是自动生成dlg对话框dlg=new MessageDlg(this);//创建对话框dlg->exec();myLocal=dlg->localIP;myPeer=dlg->peerIP;thread=new MyThread(myLocal);//创建第一个线程来接受消息thread->start();thread2=new MyThread2(myLocal,NULL);//创建第二个线程来接受文件//timerId=startTimer(10);ui.listWidget->setItemDelegate(new MyItemDraw(ui.listWidget));//视图展示方式,如果没有写,系统将默认添加connect(thread,SIGNAL(ResvMessage(QString,QString)),this,SLOT(OnResvMessage(QString,QString)));//该信号时自己制作的,当一有消息发送过来便能接收connect(thread2,SIGNAL(RecvFile(QString,QString)),this,SLOT(OnResvFile(QString,QString)));connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(OnBtn()));connect(ui.pushButton_2,SIGNAL(clicked()),this,SLOT(OnBtnClear()));connect(ui.pushButton_3,SIGNAL(clicked()),this,SLOT(OnSenFile()));//使listWidget支持右击ui.listWidget->setContextMenuPolicy(Qt::CustomContextMenu);connect(ui.listWidget,SIGNAL(customContextMenuRequested(const QPoint&)),this,SLOT(OnContextMwnu(const QPoint&)));connect(ui.actionClear,SIGNAL(triggered()),this,SLOT(OnActionClear()));}MyMessage::~MyMessage(){}int MyMessage::OnResvMessage(QString strtime,QString str){QListWidgetItem* item=new QListWidgetItem();item->setData(Qt::DisplayRole,strtime);item->setData(Qt::UserRole,str);item->setData(Qt::UserRole+1,false);item->setData(Qt::UserRole+2,false);ui.listWidget->addItem(item);return 0;}int MyMessage::OnResvFile(QString strtime,QString str){QListWidgetItem* item=new QListWidgetItem();item->setData(Qt::DisplayRole,strtime);//设置Data,虚拟item->setData(Qt::UserRole+2,true);item->setData(Qt::UserRole+3,str);ui.listWidget->addItem(item);QMessageBox::information(NULL,"hello",GBK::ToUnicode("你收到了一个文件,请注意查收!"));return 0;}int MyMessage::OnBtn(){QString str=ui.lineEdit->text();string buf=GBK::FromUnicode(str);// char *ch=new char[1024];// ch=(char*)buf.c_str();string buflocal=GBK::FromUnicode(myLocal);//获取对话框中主机地址// char *chlocal=new char[32];// chlocal=(char*)buflocal.c_str();OS_SockAddr local(buflocal.c_str(),9000);//创建socketOS_UdpSocket socket;socket.Open(local,true);string bufpeer=GBK::FromUnicode(myPeer);//获取对话框中对方地址// char *chpeer=new char[32];// chpeer=(char*)bufpeer.c_str();OS_SockAddr peer(bufpeer.c_str(),9001);socket.SendTo(buf.c_str(),1024,peer);//当下时间time_t now=time(NULL);tm one=*localtime(&now);int hour=one.tm_hour;int minute=one.tm_min;int second=one.tm_sec;char buftime[1024];if (hour>=0&&hour<=12){sprintf(buftime,"AM-%d-%d-%d: ",hour,minute,second);}else{sprintf(buftime,"PM-%d-%d-%d: ",hour,minute,second);}//string fun=GBK::FromUnicode(str);//strcat(buftime,fun.c_str());//str=GBK::ToUnicode(buftime);QString strtime=GBK::ToUnicode(buftime);QListWidgetItem* item=new QListWidgetItem();item->setData(Qt::DisplayRole,strtime);//设置Data,虚拟item->setData(Qt::UserRole,str);item->setData(Qt::UserRole+1,true);//标记为发送头像item->setData(Qt::UserRole+2,false);ui.listWidget->addItem(item);ui.lineEdit->clear();return 0;}int MyMessage::OnBtnClear(){ui.listWidget->clear();return 0;}int MyMessage::OnSenFile(){thread2->start();//启动第二个线程QString filename=QFileDialog::getOpenFileName(this,GBK::ToUnicode("选择文件"));SendFileDlg sfd(filename,myLocal,myPeer);sfd.exec();//当下时间time_t now=time(NULL);tm one=*localtime(&now);int hour=one.tm_hour;int minute=one.tm_min;int second=one.tm_sec;char buftime[1024];if (hour>=0&&hour<=12){sprintf(buftime,"AM-%d-%d-%d: ",hour,minute,second);}else{sprintf(buftime,"PM-%d-%d-%d: ",hour,minute,second);}//string fun=GBK::FromUnicode(str);//strcat(buftime,fun.c_str());//str=GBK::ToUnicode(buftime);QString strtime=GBK::ToUnicode(buftime);QListWidgetItem* item=new QListWidgetItem();item->setData(Qt::DisplayRole,strtime);//设置Data,虚拟item->setData(Qt::UserRole+2,true);item->setData(Qt::UserRole+3,GBK::ToUnicode("文件发送成功"));ui.listWidget->addItem(item);return 0;}//右击信号int MyMessage::OnContextMwnu(const QPoint& pos){QListWidgetItem* item=ui.listWidget->itemAt(pos);QMenu menu;if (item){menu.addAction(ui.actionClear);}menu.exec(ui.listWidget->mapToGlobal(pos));return 0;}int MyMessage::OnActionClear(){int row=ui.listWidget->currentRow();QListWidgetItem* item=ui.listWidget->takeItem(row);if (item){delete item;}return 0;}//版本二使用信号发射,故不需要使用轮询机制//void MyMessage::timerEvent(QTimerEvent *event)//{// if (event->timerId()==timerId)// {// ui.plainTextEdit->setPlainText(thread->Over());// }//}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。