From e7a06273acb382d55e48b4ac4ba7cd4633ddecbc Mon Sep 17 00:00:00 2001 From: "dmy@lab" Date: Wed, 8 Apr 2015 23:44:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E4=B8=AAQt=E5=86=99=E7=9A=84=E7=AE=80?= =?UTF-8?q?=E5=8D=95=E5=8A=A0=E5=AF=86=E8=81=8A=E5=A4=A9=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dmy@lab --- .gitignore | 1 + Client.cpp | 62 +++++++++++++++ Client.h | 36 +++++++++ Config.cpp | 83 ++++++++++++++++++++ Config.h | 21 +++++ LanPaper.cpp | 148 +++++++++++++++++++++++++++++++++++ LanPaper.h | 44 +++++++++++ LanPaper.pro | 40 ++++++++++ LanPaper.ui | 81 +++++++++++++++++++ Secret.cpp | 133 +++++++++++++++++++++++++++++++ Secret.h | 21 +++++ Server.cpp | 73 +++++++++++++++++ Server.h | 31 ++++++++ ThreadedServerConnection.cpp | 30 +++++++ ThreadedServerConnection.h | 23 ++++++ TrayIco.cpp | 56 +++++++++++++ TrayIco.h | 31 ++++++++ big_smile.ico | Bin 0 -> 67646 bytes emoticon.ico | Bin 0 -> 67646 bytes main.cpp | 14 ++++ rc.svt | 4 + resource.qrc | 6 ++ 22 files changed, 938 insertions(+) create mode 100644 .gitignore create mode 100644 Client.cpp create mode 100644 Client.h create mode 100644 Config.cpp create mode 100644 Config.h create mode 100644 LanPaper.cpp create mode 100644 LanPaper.h create mode 100644 LanPaper.pro create mode 100644 LanPaper.ui create mode 100644 Secret.cpp create mode 100644 Secret.h create mode 100644 Server.cpp create mode 100644 Server.h create mode 100644 ThreadedServerConnection.cpp create mode 100644 ThreadedServerConnection.h create mode 100644 TrayIco.cpp create mode 100644 TrayIco.h create mode 100644 big_smile.ico create mode 100644 emoticon.ico create mode 100644 main.cpp create mode 100644 rc.svt create mode 100644 resource.qrc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2b0de7a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +LanPaper.pro.* \ No newline at end of file diff --git a/Client.cpp b/Client.cpp new file mode 100644 index 0000000..7c30db9 --- /dev/null +++ b/Client.cpp @@ -0,0 +1,62 @@ +#include "Client.h" + +Client::Client(QObject *parent) : + QObject(parent) +{ + tcpSocket = new QTcpSocket(this); + connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected()) ); +} + + +void Client::sendMessage(const QString& message) +{ + Secret* secret=new Secret; + QString encodedText=secret->getEncodeString(message); + this->message=encodedText; + //qDebug()<tcpSocket->close(); + this->startConnection(); + this->socketState=QTcpSocket::ConnectingState; + this->trialCount=1; + this->timer=this->startTimer(1000); + //qDebug()<<"start timer"<<"\n"; + +} + +void Client::connected() +{ + tcpSocket->write(message.toUtf8()); + tcpSocket->waitForBytesWritten(10*1000); + //tcpSocket->write("\n\n\n\n\n"); + tcpSocket->waitForBytesWritten(10*1000); + this->socketState=QTcpSocket::ConnectedState; + emit this->connectionSuccess(true); + this->killTimer(this->timer); + this->tcpSocket->close(); +} + +void Client::startConnection() +{ + //qDebug()<tcpSocket->connectToHost(Config::getDesIP(),QString(Config::getDesPort()).toInt() ); +} + +void Client::timerEvent(QTimerEvent *e) +{ + //qDebug()<<"try"<trialCount<<"\n"; + if(this->trialCount==6) + { + this->tcpSocket->close(); + this->killTimer(this->timer); + emit this->connectionSuccess(false); + + } + if(this->socketState==QTcpSocket::ConnectingState) + { + //this->tcpSocket->close(); + //this->startConnection(); + this->trialCount+=1; + } + +} diff --git a/Client.h b/Client.h new file mode 100644 index 0000000..ca60370 --- /dev/null +++ b/Client.h @@ -0,0 +1,36 @@ +#ifndef CLIENT_H +#define CLIENT_H + +#include +#include +#include +#include +#include "Config.h" +#include "LanPaper.h" +class LanPaper; +class Client : public QObject +{ + Q_OBJECT + +public: + explicit Client(QObject *parent = 0); + void sendMessage(const QString& message); +signals: + void connectionSuccess(bool success); +private: + void startConnection(); +private: + QTcpSocket* tcpSocket; + QString message; + QTcpSocket::SocketState socketState; + int trialCount; + int timer; + void timerEvent(QTimerEvent *); + +public slots: +private slots: + void connected(); + +}; + +#endif // CLIENT_H diff --git a/Config.cpp b/Config.cpp new file mode 100644 index 0000000..f9af94d --- /dev/null +++ b/Config.cpp @@ -0,0 +1,83 @@ +#include "Config.h" +QHash* Config::hash=NULL; +Config::Config() +{ +} + + +QString Config::getSrcIP() +{ + Config::read(); + if(NULL!=Config::hash&&Config::hash->contains("SrcIP")) + { + return (*hash)["SrcIP"]; + } + return ""; +} +QString Config::getSrcPort() +{ + Config::read(); + if(NULL!=Config::hash&&Config::hash->contains("SrcPort")) + { + return (*hash)["SrcPort"]; + } + return ""; +} +QString Config::getDesIP() +{ + Config::read(); + if(NULL!=Config::hash&&Config::hash->contains("DesIP")) + { + return (*hash)["DesIP"]; + } + return ""; +} + +QString Config::getDesPort() +{ + Config::read(); + if(NULL!=Config::hash&&Config::hash->contains("DesPort")) + { + return (*hash)["DesPort"]; + } + return ""; +} + +void Config::read() +{ + QString filePath="./rc.svt"; + if(!QFile::exists(filePath)) + { + return; + } + if(Config::hash!=NULL) + { + return; + } + Config::hash=new QHash; + QFile file(filePath); + QString line; + QStringList sep; + QString key; + QString value; + file.open(QFile::ReadOnly); + if(file.isOpen()) + { + QTextStream reader(&file); + while( (line=reader.readLine())!=NULL) + { + sep=line.split('#'); + if(sep.length()!=2) + { + continue; + } + key=sep.at(0).trimmed(); + value=sep.at(1).trimmed(); + if(!Config::hash->contains(key)) + { + Config::hash->insert(key,value); + } + } + file.close(); + } +} diff --git a/Config.h b/Config.h new file mode 100644 index 0000000..11bdd24 --- /dev/null +++ b/Config.h @@ -0,0 +1,21 @@ +#ifndef CONFIG_H +#define CONFIG_H +#include +#include +#include +#include +#include +class Config +{ +public: + Config(); + static QString getSrcIP(); + static QString getSrcPort(); + static QString getDesIP(); + static QString getDesPort(); + static void read(); +private: + static QHash* hash; + +}; +#endif // CONFIG_H diff --git a/LanPaper.cpp b/LanPaper.cpp new file mode 100644 index 0000000..f57b0e9 --- /dev/null +++ b/LanPaper.cpp @@ -0,0 +1,148 @@ +#include "LanPaper.h" + +LanPaper::LanPaper(QWidget *parent) : + QMainWindow(parent),server(new Server(this)) +{ + setupUi(this); + this->server->listen(QHostAddress(Config::getSrcIP()),QString(Config::getSrcPort()).toInt() ); + //install message key filter + this->pTEMessage->installEventFilter(this); + this->installEventFilter(this); + this->trayIco=new TrayIco(this); + connect(this->actionAbout,SIGNAL(triggered()),this,SLOT(aboutClick()) ); + QScrollBar* scrollBar=this->pTEChatText->verticalScrollBar(); + scrollBar->setTracking(true); + +} + + +void LanPaper::addChatContentToThereSide(const QString& content) +{ + QTime time=QTime::currentTime(); + QString displayTime=QString("%1:%2:%3").arg(time.hour()).arg(time.minute()).arg(time.second()); + this->pTEChatText->appendPlainText(displayTime+":There"); + this->pTEChatText->appendPlainText(content); + this->pTEChatText->appendPlainText(" "); + if(this->isHidden()||this->isMinimized()||!this->isWindowsActivated()) + { + this->trayIco->setFlash(true); + } + this->scrollToBottom(); +} + +QString LanPaper::getMessage() +{ + return this->pTEMessage->toPlainText(); +} + +void LanPaper::on_pBTSendMessage_clicked() +{ + + QString text=this->pTEMessage->toPlainText(); + if(text.trimmed()=="") + { + QMessageBox::information(this,"warning","no empty message allowed."); + return; + } + this->addChatContentToMeSide(text); + this->client=new Client(this); + connect(this->client,SIGNAL(connectionSuccess(bool)),this,SLOT(clientSuccess(bool)) ); + this->client->sendMessage(text); + this->pBTSendMessage->setEnabled(false); + +} + +void LanPaper::addChatContentToMeSide(const QString& content) +{ + QTime time=QTime::currentTime(); + QString displayTime=QString("%1:%2:%3").arg(time.hour()).arg(time.minute()).arg(time.second()); + this->pTEChatText->appendPlainText(" Me:"+displayTime); + this->pTEChatText->appendPlainText(" "+content); + this->pTEChatText->appendPlainText(" "); + this->scrollToBottom(); +} + +bool LanPaper::eventFilter(QObject *obj, QEvent *event) +{ + if(obj==this->pTEMessage) + { + if(event->type()==QEvent::KeyPress) + { + QKeyEvent* keyEvent=(QKeyEvent*)event; + if(keyEvent->key()==Qt::Key_Return||keyEvent->key()==Qt::Key_Enter) + { + this->on_pBTSendMessage_clicked(); + event->accept(); + return true; + } + } + } + if(obj==this) + { + if(event->type()==QEvent::WindowActivate) + { + this->trayIco->setFlash(false); + } + } + return false; +} + +void LanPaper::changeEvent(QEvent *e) +{ + if((e->type()==QEvent::WindowStateChange)&&this->isMinimized()) + { + this->hide(); + } +} + +void LanPaper::aboutClick() +{ + QString srcIP=Config::getSrcIP(); + QString srcPort=Config::getSrcPort(); + QString desIP=Config::getDesIP(); + QString desPort=Config::getDesPort(); + QString info; + info=QString("src %1:%2\n des %3:%4").arg(srcIP).arg(srcPort).arg(desIP).arg(desPort); + QMessageBox::about(this,"about",info); +} + +void LanPaper::clientSuccess(bool success) +{ + if(success) + { + this->pTEMessage->setPlainText(""); + } + else + { + QMessageBox::warning(this,"warning","message send failed."); + } + this->pBTSendMessage->setEnabled(true); + this->pTEMessage->setFocus(); + this->client->deleteLater(); +} + +bool LanPaper::isWindowsActivated() +{ + if(this->isActiveWindow()) + { + return true; + } + if(this->pTEChatText->isActiveWindow()) + { + return true; + } + if(this->pTEChatText->isActiveWindow()) + { + return true; + } + return false; +} + + +void LanPaper::scrollToBottom() +{ + QScrollBar* scrollBar=this->pTEChatText->verticalScrollBar(); + scrollBar->setValue(scrollBar->maximum()); +} + + diff --git a/LanPaper.h b/LanPaper.h new file mode 100644 index 0000000..2360caf --- /dev/null +++ b/LanPaper.h @@ -0,0 +1,44 @@ +#ifndef LANPAPER_H +#define LANPAPER_H + +#include "Server.h" +#include "ui_LanPaper.h" +#include +#include "Client.h" +#include +#include +#include "TrayIco.h" +#include "Config.h" +#include +//#include "Secret.h" +class Server; +class TrayIco; +class Client; +class LanPaper : public QMainWindow, private Ui::LanPaper +{ + Q_OBJECT + +public: + explicit LanPaper(QWidget *parent = 0); + void addChatContentToThereSide(const QString &content); + QString getMessage(); +private: + void addChatContentToMeSide(const QString& content); + virtual bool eventFilter(QObject *, QEvent *); + virtual void changeEvent(QEvent *); + bool isWindowsActivated(); + void scrollToBottom(); +private slots: + void on_pBTSendMessage_clicked(); + void aboutClick(); + void clientSuccess(bool success); + +private: + Server* server; + TrayIco* trayIco; + Client *client; +}; + +#endif // LANPAPER_H + + diff --git a/LanPaper.pro b/LanPaper.pro new file mode 100644 index 0000000..f4aca09 --- /dev/null +++ b/LanPaper.pro @@ -0,0 +1,40 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2013-12-01T10:03:18 +# +#------------------------------------------------- + +QT += core gui network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = LanPaper +TEMPLATE = app +LIBS+=-static +#LIBS+=C:/Qt5Lib/plugins/imageformats/libqico.a + +SOURCES += main.cpp\ + LanPaper.cpp \ + Server.cpp \ + ThreadedServerConnection.cpp \ + Client.cpp \ + TrayIco.cpp \ + Secret.cpp \ + Config.cpp + +HEADERS += LanPaper.h \ + Server.h \ + ThreadedServerConnection.h \ + Client.h \ + TrayIco.h \ + Secret.h \ + Config.h + +FORMS += LanPaper.ui + +RESOURCES += \ + resource.qrc + +#QTPLUGIN+=qico + +#CONFIG += staticlib diff --git a/LanPaper.ui b/LanPaper.ui new file mode 100644 index 0000000..5feef7c --- /dev/null +++ b/LanPaper.ui @@ -0,0 +1,81 @@ + + + LanPaper + + + + 0 + 0 + 582 + 706 + + + + LanPaper + + + + + + 10 + 30 + 281 + 631 + + + + true + + + + + + 310 + 30 + 261 + 121 + + + + + + + 400 + 160 + 91 + 41 + + + + Send + + + + + + + + 0 + 0 + 582 + 21 + + + + + More + + + + + + + + about + + + + + + + diff --git a/Secret.cpp b/Secret.cpp new file mode 100644 index 0000000..642d533 --- /dev/null +++ b/Secret.cpp @@ -0,0 +1,133 @@ +#include "Secret.h" + +Secret::Secret(): + secretkey(NULL) +{ + this->secretkey=new char[36]; + this->secretkey[0]=0x2b; + this->secretkey[1]=0xef; + this->secretkey[2]=0x33; + this->secretkey[3]=0xaf; + this->secretkey[4]=0x2b; + this->secretkey[5]=0x4c; + this->secretkey[6]=0x91; + this->secretkey[7]=0xb6; + this->secretkey[8]=0xac; + this->secretkey[9]=0xe5; + this->secretkey[10]=0xca; + this->secretkey[11]=0x21; + this->secretkey[12]=0xc4; + this->secretkey[13]=0xb5; + this->secretkey[14]=0xbe; + this->secretkey[15]=0x5d; + this->secretkey[16]=0x7c; + this->secretkey[17]=0x3c; + this->secretkey[18]=0xc3; + this->secretkey[19]=0x16; + this->secretkey[20]=0x29; + this->secretkey[21]=0x7b; + this->secretkey[22]=0x8a; + this->secretkey[23]=0x99; + this->secretkey[24]=0x3e; + this->secretkey[25]=0x90; + this->secretkey[26]=0xce; + this->secretkey[27]=0x37; + this->secretkey[28]=0xf8; + this->secretkey[29]=0x8f; + this->secretkey[30]=0xec; + this->secretkey[31]=0x84; + this->secretkey[32]=0xcf; + this->secretkey[33]=0xf1; + this->secretkey[34]=0x74; + this->secretkey[35]=0x26; + +} + +Secret::~Secret() +{ + if(NULL!=this->secretkey) + { + delete[] this->secretkey; + } +} + + +QByteArray Secret::getEncodeString(const QString& str) +{ + QByteArray data(str.toUtf8()); + QDate currentDate=QDate::currentDate(); + int day; + day=currentDate.day()%16+1; + QByteArray newData; + int keyInd=0; + //newData.reserve(data.size()+data.size()/day+10); + for(int i=0;isecretkey[keyInd%36]) )+500); + keyInd++; + //qDebug()<secretkey[keyInd%1]<<"\n"; + //newData.push_back( (data.at(i))+00); + + if(i%day==0) + { + QTime t; + t= QTime::currentTime(); + for(int k=0;k<3;k++) + { + qsrand(t.msec()+t.second()*1000); + int n = qrand(); + QByteArray md5=QCryptographicHash::hash(QString("%1").arg(n).toLatin1(), QCryptographicHash::Md5); + newData.push_back(md5[0]); + newData.push_back(md5[1]); + newData.push_back(md5[2]); + newData.push_back(md5[3]); + newData.push_back(md5[4]); + newData.push_back(md5[5]); + qsrand(t.msec()+t.second()*1000+n); + md5=QCryptographicHash::hash(QString("%1").arg(n).toLatin1(), QCryptographicHash::Md5); + newData.push_back(md5[6]); + newData.push_back(md5[7]); + newData.push_back(md5[8]); + newData.push_back(md5[9]); + newData.push_back(md5[10]); + newData.push_back(md5[11]); + md5=QCryptographicHash::hash(QString("%1").arg(n).toLatin1(), QCryptographicHash::Md5); + newData.push_back(md5[12]); + newData.push_back(md5[0]); + newData.push_back(md5[2]); + newData.push_back(md5[4]); + newData.push_back(md5[6]); + newData.push_back(md5[8]); + } + } + } + return newData.toHex(); +} + +QString Secret::getDecodeString(const QByteArray& code) +{ + QByteArray data=QByteArray::fromHex(code); + QByteArray newData; + QDate currentDate=QDate::currentDate(); + int day; + day=currentDate.day()%16+1; + int keyInd=0; + for(int i=0;isecretkey[keyInd%36])); + keyInd++; + + } + if(i%day==0) + { + i+=54; + continue; + } + + } + //return data; + return QString(newData); + +} diff --git a/Secret.h b/Secret.h new file mode 100644 index 0000000..26424f3 --- /dev/null +++ b/Secret.h @@ -0,0 +1,21 @@ +#ifndef SECRET_H +#define SECRET_H + +#include +#include +#include +#include +#include +class Secret +{ +public: + Secret(); + ~Secret(); + QByteArray getEncodeString(const QString& str); + QString getDecodeString(const QByteArray& code); +private: + char* secretkey; + +}; + +#endif // SECRET_H diff --git a/Server.cpp b/Server.cpp new file mode 100644 index 0000000..70815f1 --- /dev/null +++ b/Server.cpp @@ -0,0 +1,73 @@ +#include "Server.h" + + +Server::Server(QObject *parent) : + QTcpServer(parent) +{ + connect(this,SIGNAL(newConnection()), this,SLOT(newConnection()) ); +} + + +void Server::newConnection() +{ + this->tcpSocket=this->nextPendingConnection(); + if(this->tcpSocket!=NULL) + { + this->tcpSocket=tcpSocket; + connect(this->tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead()) ); + } + else + { + QMessageBox::aboutQt(0); + } +} + +void Server::readyRead() +{ + QByteArray data=this->tcpSocket->readAll(); + if(this->receivedData.size()==0)//first section of data + { + this->timer=this->startTimer(1000*10); + } + this->receivedData.push_back(data); +// char a1=data.at(data.size()-1); +// char a2=data.at(data.size()-2); +// char a3=data.at(data.size()-3); +// char a4=data.at(data.size()-4); +// char a5=data.at(data.size()-5); + if(this->tcpSocket->atEnd()) + //if(data.at(data.size()-1)=='\n'&&data.at(data.size()-2)=='\n'&&data.at(data.size()-3)=='\n'&&data.at(data.size()-4)=='\n'&&data.at(data.size()-5)=='\n') + { + //this->receivedData.remove(this->receivedData.size()-5,5); + // QByteArray f=this->receivedData; + LanPaper *mainWin=(LanPaper *)(this->parent()); + if(NULL!=mainWin) + { + //tcpSocket->waitForReadyRead(5*1000); + //qDebug()<<"read buff"<tcpSocket->readBufferSize()<<"\n"; + //this->tcpSocket->setReadBufferSize(1024*100); + //QByteArray data=this->tcpSocket->readAll(); + //qDebug()<receivedData); + mainWin->addChatContentToThereSide(decodedText); + this->resetConnection(); + this->killTimer(this->timer); + } + + } +} + +void Server::timerEvent(QTimerEvent *e) +{ + this->killTimer(this->timer); + this->resetConnection(); + //qDebug()<<"recei failed\n"; +} + +void Server::resetConnection() +{ + this->receivedData.clear(); + this->tcpSocket->close(); + this->tcpSocket->deleteLater(); +} diff --git a/Server.h b/Server.h new file mode 100644 index 0000000..1e2ed68 --- /dev/null +++ b/Server.h @@ -0,0 +1,31 @@ +#ifndef SERVER_H +#define SERVER_H + +#include +#include +#include "LanPaper.h" +#include "ThreadedServerConnection.h" +#include +#include "Secret.h" +class Server : public QTcpServer +{ + Q_OBJECT +public: + explicit Server(QObject *parent = 0); +private: + virtual void timerEvent(QTimerEvent *); + void resetConnection(); +private: + QByteArray receivedData; + int timer; +protected: + QTcpSocket* tcpSocket; +signals: + +public slots: +private slots: + void newConnection(); + void readyRead(); +}; + +#endif // SERVER_H diff --git a/ThreadedServerConnection.cpp b/ThreadedServerConnection.cpp new file mode 100644 index 0000000..8a93ee0 --- /dev/null +++ b/ThreadedServerConnection.cpp @@ -0,0 +1,30 @@ +#include "ThreadedServerConnection.h" + +ThreadedServerConnection::ThreadedServerConnection(int socketDescriptor, const QString &fortune, QObject *parent) : + QThread(parent), socketDescriptor(socketDescriptor), text(fortune) +{ +} + + +void ThreadedServerConnection::run() +{ + QTcpSocket tcpSocket; +//! [1] //! [2] + if (!tcpSocket.setSocketDescriptor(socketDescriptor)) { + emit error(tcpSocket.error()); + return; + } +//! [2] //! [3] + + QByteArray block; + QDataStream out(&block, QIODevice::WriteOnly); + out.setVersion(QDataStream::Qt_5_1); + //out << (quint16)0; + out << text; + //out.device()->seek(0); + //out << (quint16)(block.size() - sizeof(quint16)); +//! [3] //! [4] + tcpSocket.write(block); + tcpSocket.disconnectFromHost(); + tcpSocket.waitForDisconnected(); +} diff --git a/ThreadedServerConnection.h b/ThreadedServerConnection.h new file mode 100644 index 0000000..eed61f6 --- /dev/null +++ b/ThreadedServerConnection.h @@ -0,0 +1,23 @@ +#ifndef THREADEDSERVERCONNECTION_H +#define THREADEDSERVERCONNECTION_H + +#include +#include +#include +#include +class ThreadedServerConnection : public QThread +{ + Q_OBJECT +public: + explicit ThreadedServerConnection(int socketDescriptor, const QString &fortune, QObject *parent=0); + void run(); +signals: + void error(QTcpSocket::SocketError socketError); +private: + int socketDescriptor; + QString text; +public slots: + +}; + +#endif // THREADEDSERVERCONNECTION_H diff --git a/TrayIco.cpp b/TrayIco.cpp new file mode 100644 index 0000000..5cbb05e --- /dev/null +++ b/TrayIco.cpp @@ -0,0 +1,56 @@ +#include "TrayIco.h" + +TrayIco::TrayIco(QObject *parent) : + QObject(parent),normalIcon(":/ico/smileico"),flashIcon(":/ico/flashsmileico"),timer(0) + //QObject(parent),normalIcon("c:/bpa/emoticon.ico"),flashIcon("c:/bpa/big_smile.ico"),timer(0) +{ + this->trayIco.setIcon(this->normalIcon); + this->trayIco.show(); + connect(&this->trayIco,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(activated(QSystemTrayIcon::ActivationReason)) ); +} + + +void TrayIco::activated(QSystemTrayIcon::ActivationReason reason) +{ + if(reason==QSystemTrayIcon::Trigger) + { + + LanPaper *mainWin=(LanPaper *)this->parent(); + this->setFlash(false); + mainWin->showNormal(); + mainWin->activateWindow(); + } +} + +void TrayIco::setFlash(bool flash) +{ + if(flash) + { + if(this->timer!=0) + { + return; + } + this->flashFlag=true; + this->timer=this->startTimer(500); + } + else + { + this->trayIco.setIcon(this->normalIcon); + this->killTimer(this->timer); + this->timer=0; + } +} + +void TrayIco::timerEvent(QTimerEvent *e) +{ + if(this->flashFlag) + { + this->trayIco.setIcon(this->flashIcon); + this->flashFlag=false; + } + else + { + this->trayIco.setIcon(this->normalIcon); + this->flashFlag=true; + } +} diff --git a/TrayIco.h b/TrayIco.h new file mode 100644 index 0000000..911737c --- /dev/null +++ b/TrayIco.h @@ -0,0 +1,31 @@ +#ifndef TRAYICO_H +#define TRAYICO_H +#include "LanPaper.h" +#include +#include +#include + +class TrayIco : public QObject +{ + Q_OBJECT +public: + explicit TrayIco(QObject *parent = 0); + void setFlash(bool); +private: + void timerEvent(QTimerEvent *); +private: + QSystemTrayIcon trayIco; + QIcon normalIcon; + QIcon flashIcon; + int timer; + bool flashFlag; + +signals: + +public slots: +private slots: + void activated(QSystemTrayIcon::ActivationReason); + +}; + +#endif // TRAYICO_H diff --git a/big_smile.ico b/big_smile.ico new file mode 100644 index 0000000000000000000000000000000000000000..2678003d0d51f72a04d6464772d966b3e5980dd9 GIT binary patch literal 67646 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 z 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%0D*Hio1ZX`kXzUQiyt9HHqFFN7Xf6vfGDX;Oy zHJ*4yiSuRu|0`p`PMiM!58Dlif8PzC{|jO%?^!Zd{}=0j`d@az-~V#3xL^49zrvz_ zm}LsI>_Mq-@TCXjdIH3Tl?|Zyhhc2#05twJ`~QE*sek?p_x=3O-|_7~U;EepyscmV z^R#>c(~^__g6F)!a}Th&D17MvR1SbJma;&s@9Te&?sxx%I$!)3YkB@(vF7Q2sfz1+ zLG3s2c?+QNK+t#|Xj~6e2Y||aP~HcpgARW1nqE*H0UGZEjUQ%B^pJ17xlyb0^?zAV z-kDk}@ z%P#oyUk-#p@xJ&U?(zhiyJ6)5j7Clm$Yld4{$UuF4nQ<49e`+9T7ZsA!p5hirv3dd z*!}%KU;DTJViSHr=00aY=fR=#Q1CS|&@=#AF9mKJfa(Jf2Gs{33`zqaJOQy^LZS~; z27CgK%Yo8>JZSBG&C~y^ISa$V=Tw6F@}TiN(3}9M9{_3tfZ`uSgZh1-wgG64A5`{( z#(Og-d8@ZSd#Tm+`oH+ZSO3K(gW~@qIPZhYZ7gw(HBLc!8YxbZ;}Jlj5U9N0{r|t~s<;1H(c1S+DNFwgw%`0OGygX@?m_V{zv%COC76968Vg1#b6|cz zP7~<8~7 z1(oTbIU!IP4=U?HWj?6v2le|vZ|_$_uC1Hf4^-%{|lg%`JlKLoBR?S_c9B9 z|Ce3(=fC38f8cZjG9Qd_xdkmvV5A4+v;bnm$^;ONB`u(|7eHkJ6vM~0aijxKJAtTl zKulQxtq&yne}ebb33tEzFWT|qKWOijY~}6a44{2EptGhxWjm;hhqVDfbwG4IANU-7 zP`?kn0h$IBVEsu@nSh=SU~`tRxog;Z38bjpf)1b`rzMx zvHnls@mWwBP^fwcjCc3G2 zJiVvg{pP>Kl-K{or-I`D<9~&Pe^BaYSh%9ZHMTfj_5Z&L5mnuUP|5~E=>U`-plJc6 z{{T%3ILiaHbbz-`fR+U)X#kcEK<$Bv|Nl$$fBP@e3mK!AZg~!lf8mlN&CvOKWAL0H zs0|3J^Fi?sN(Z3w0Ms@F)%_WhYL?p6>V>K|}g zrX($Z;va@dOb4(wB1WA+Oj!Vme-H+>3n%^mFFEly_&hw&IIRSz4yb$fU%K+z2JqSS zur>gw4H(-d3?2snr2|lT02=cJwGlHX+DkW{@6qmg^Ivh|oBtBiU;mew{^q~z?4OW2 z8x&^97%i-E#_^i}|5XWK%Ps%^`|ke#-*ekfjP{;D*PZ_o^MC#a#lPIr-}ueKk=DRz z0L{H9brNz~0M!@B>48wW0IL^3G_G_2Eek;NW8m_Dj5-0{KEzfQfYZRg|6&t9fX8V; zW3`|?xbijk?}6KZpt)R79S>>)g68=^bw4N_fXV~VxDTl9mpRcD$ixJZSDX6$XILr|Nox5{{Q#g^Z&m@?Ov3;&s~4! zzxcc#|0U-C_%FTa7m7ZR8OY{>*|^+*mM$>T19G}1A}wI8A3*UB!&FKK;5q@REWn!v zCjSSo!xQa)^=l?-zfGvMv5coVH&^Q37t_Rimpt2tn|DZV^P~Q;R_S5Kk zb{7=?5}>%B`5HW?ro8eWxDF>OzM=69iW?NX?*D%^9N22x|Nq{5Kh$0wFyCZGN=yt2^p`O@an&8+l&98{kVc9`%A#% zK%hDv)CT~~1%b-`#8y!TP~Q*KHw2Xr*%Mqraj!Aq?SILcum4NVdh=gq_E*%p7C9_I zVT%^#;CR3m&+GsHSHpreHvIqZzWe`wuRZ_&^C7kO8B>=07n=G89RCsve*9Nn^AD?j z3^TFWjpRn0X#y!dpp*@0X#w0;K&~IK)eY$B04WWC=D0D^0Vw`K7^zOcXcvIuAA~_^ z0E9tnQL&60N=^RrUu@zVa2k;6dI^qysjACM7{Fut6O9=_bv>xg2le|w@egVbfX00@ zCt3+t?@8C~d;4DsAB84S5f1`&tmN-^l|Np=G2JF~u>;M0r zd;b5|n{^u{?{ha@_%Ay5J2?K8R{zDRAH`fOc7xLgx*L)F08S6cX&S^PlopWd2UwXv zPC7svPb9i50L4EDgVF#9gVF)KP4EvqRtp}l?|b- zvL93r!215_ldPp0Pt}3qUwP`=|JsY*{+F5a=D#ASt&J3382KA5%u(V4InFo!|F4b( zyX^k|-(&Cp|C~99wHwUY>;DVS{q|pE-nakKOMYV2hs`Wpc7xLZvO9642cpvgwlaat zbU;#BfTKP@Zxe`5{_tOE#_RvmQ(lAPU!m^dUGUvlpgJB@*MsZ)9uWpmJpgJCg4X+F zO|VgFzqv@a|J{Fu>2LoVE_?T1Z|VF0$}9e&*4s$oh%;YfiDz(pZTkOTebfK{8c?je z<^O;8y`VL_sP#Ty?*nlBi_ZW4Uwz|0xO$jAWEx~19OJSVIUR!7NPYmP4dnCyP3stG zfrv5zTsNSl19;m2G~NuV7eH+S5Js;P@RbE~AnW5%+6ADx0ED6C0P=W|+_W$MO%}fW zFF*bDf5qk(;4}d51Ayv!9PzK#`CzBsgm?etXTJS!x$6CY%atGhn`}m{w=wb z>w_8p|I5#W>|e54^7Fs>l6U{r=e+qZ*ZK0lO5=xXdC}YdHfulpx8L~XzuWHrV63|tss2U^Q*8MfJ&s`UsJZq3 ze;C%;_W!@j{{R2gr(T7}Kd9d4pZ(>(z??7tmDm4)tA**oOXEr_=;;E!Z zXjuSm8zQFx=o$m$c_d@dekbt0mEZp@m%jUNu<-4Fx$am0L3{Lt%MTQT#{fWMK;SlC zw-~toM~Z(?-0Mzy_g`i4yZ?6UKKyss@a@0*p8sI%3TmT+@-8U+(8ClY4#nWOMv7;Y zINSFBza|tL@BIJYdH?_ayhVsLe4MRU{`1fI{9kPGcepy3dV(}AJE87^r%80TgZu+3 z6F?Xg|1gY{4nXZ3cv@KZA0GFxwMQUYwCgH34S>c-u%!dMZ39pmSOQ%KiJS&NYiL1b z0dg9El?9;q2VrPA0E&Ci-Zc=mTlV+A)$(`$4Hv!rFW2+xKWMMEOwE-=gyLU+;`{%G zGv5E#TK4Y0{e}d2Q+>S_77L{pXqW>A&FoFJO6)8lo{4yKtrpWOt*bWt6rGwzRO}|9{yz zsC^aW_y@5?yRSmh0Ma-DN;&|w4M7-R`w&zYfG~1d04fJS7%dH$F8}}EY0dxtPOG69 zw3l_&|NnL?-~BgP^7g;MY-s#fUtLHr|4(}V-*oo-|AwpH|99T>;lKN?AOF1%{{Qa- z!-xL=_c`?czt_S4|BZH{<~v;Rj1h-B|Nqz8`TxJef&c#{S`c%*>>W4$^UVJAUv|yU z|JpnMqhOGFycn9MFziB07lg_OcpU*MBVhFeS~`%Oi$DHBX+Ub~L;Ps~)II>E0T2eI z1L)WhdRc(pHbia{C@uK^-+aaY|1N8xc+LO+&M>_C|9|_{@Bf=Ed-vaP&YS+Smg-{Ii@{~XXUA5huPHS^U^{Daztiik^leU_~`%t0Z0G;ci0ap z&*5PXjSGBnXt3x1fBS>~;q@qU(T@L|Ge7iggwtf2VvF+o3pS?f+2Ojy4z(@c84}{@k|NjRb`~N@a*#G|?hyVZA#TE}(;!=0d z|Nmy7HpEIqK4NJ&`=0}Jhu_+t|8@5KCmL(-!IM_7xd&f*fR+t7(*mqK*z*5BYZhXx z8dv;-#HFS^M5F;+=>Qb}APg!8Ko~s@AdMRuto;AqYxDpAUYq{^_k`h%|Nnc!(!%=x z|2;r>-T(hCpfY^jhyV6Vpz&XKZ9W6~_%GV{zv0vm|1IWy{O`B((|@lWAOHL9|M5Tg z=>Px0$I$Tc|Nn#0aNzO(|1I{T#RrzSG}-_EzwM#_|FxDN*7&e?-Tu!$^TU6Qoqzx9 z?EOy~#$pG~bb*{Epyd?2+(ND^U}*ulT??xpw*3Fk-+*YhfZ`b!2Bi~~RX-tV05q^v&p(px1GD6fYne4VxVJ|KH~D|Nn9m5qr2; zr@#NtJ@?~(oqhjF$7trm(+|jgB#cq7prr-8=>XKdL-xox0{r}$=ghA`2 zHvj+c1H+sC|Mv#rjsO39gX)EiAN~hz{rKN;*}MOsa~tI9Zp;Or*N#5_i!}dlIPJrK z;~5|ShwSC(T7Z=Y&~%`-fw(pR zC=Gzxf-0+jLecUW`|Nrm134(n#{`>E_>Er*f?H~W!%zF!tf0^1V6Bt12KR|0eL2Eui>pwtc0C+BF zk_KqcukNH5=Z&U){2#dI)BpHGU;YQ~|N1}t#Q*={Cz0@}|NkS9@#+8nBVhQ<|Njw4 z*!SfB|HcRYqr|EHf&c%xDVz9Fnsp^|0r~P?*D(!6aW7kANmiEU*z~_s5tnaY5KeW%G-Yb*E{&1B#bk?U`rRs zbqg_R0Vy4T`mW%#0Ba*`|NmcpA)@^Xier2j)D8g8e?!NV!DGpw_y=K78UW!n|NonV z^6&2d|AY2GF^IkE|NkHu-ueH3APDdH|37d$1cTB+z_$PY1GYjiC@uJJ`SU+y$EW|X zyFdN6ne+C)M%%0ZVpYd77(nfOP=6n^{u8wJA5;c_)&ha*gzP>e?TJsf8c+ZD-)HOR z|9L0B{tw>&<$u)a{}6oU|Nkg79DU~h|LC)5_}u^h(a8Ax|NqfY?0xG0f0M)i|MS)D z{m+oT@;^h#p8pITxBfFud;4Ew&)@%ghyD|f@uU@ubb+28kjn<-w18YkAopEhX#v)M zfTjahBF`HEr48vB4VLnjpa18a`1(Kk(3k(wr~my&j^~)O|NqCF!-LQN z{~vSy|NmGRzVQElEE@Jc{r|tl_MiV5roV+_y~F?iBV&CuKC&E~jg($g*S`g)E1rt& z|7GXiMkz<|rUzW*0yHh4v>VaVfz)*3+kyP`hrw%Kz~#Wk|Npf%{{L?Y+UvCc|Nrm< z5FEDu|9>#v_y2zw2=D#>KNN)b{Qn;c!qEM&p}YS74*}tw|Nn>V`2Rl`gt!0y9}L1E zGq->LpMT`@|InQu{~Pwd{tr681AHzdc#mI?Ec}dk&>C=1SpX^%vU_zEIxd$O&-nD; zb?xW>na98U&pG+^fApz8|6|Yo{~vn}3B%&{{Qv)P==j3_|8dCp;{X3~Sa8_MKmT=B ze)uo8;QfD|MW6obANfxj2K6(LFdK9%5tP?Jn6qf(e^8nLmnmpv1xk8AE*r3=1@v?P zO9Q(gV~(dbqX|a$zX2#cz%Wv}keG}ZOTw1_Kxsf{-%m*W0*=PU99smD77KD%e{~vo4f@6;S{~vQ04IlddKjz^7 z|Ir5!IBNg@|6siD|Np4H|NlqA@E*wdIG{6fqW1jy-+cD#|Kx+8|J%)f_g}N~^?%8l zlPL_Kx*s&wpEyyJ0hI4S`~N{{0F)L$X#$isvU_!PCO=tbI{Wkg&|P2t7oYw1zv(h4 z{{Q_?zVsiCQ!f4gpK=)qU-|z(1sPxc|38&jeC_}LR1$FX<^TT!FZ}=Se)j)=+tdI5 z8=v_9Uu7-!@*g=Z@KkPx)GbK$2E0rFwKZXB0jYj~mkDU;!0aGo4BP$a|No$|uGrK6 z{|B#o@ZYgx2VU$k86WxoKlU&bANv147Mcz~X(8so z|Nk-j|NoDM;eG%AM}zR*|No=+{Qn=d=l}n#!$1DFp8xhgdf(^&=2PGP2c6-S`X7ct^)DzbNYA_qNdvI@14~-4IrjfQ7$5!r-|fWz|DGrR|Mxlh|9=>0jN|P8 z|0x&#|4%*-#pnM2Pd@kmf6`e9_FH`UzfuH(merKkdqYOnmkK|8y7z#U%`r8mBk@|4%0t<1pK~Yv+GL*tLJ}|D-eDAn6pF ze?VfeG=Ay-|5OmZ`2T+@6sKJL{~wGmK+-|V`TzgH_}u^hDd+zGPdxSezvuL0INjme zw-*xs&@=!_2Vi{s|Nlf#IymW z|No4`fB$z}{Pw@##Fzhm>p%Y2>U#5Ex#iwcP`+jW_3=REJgB?}<@>ZWR`4Bhpmrdv z4FIYGGA8I4&3t#$Y|iKZiO0VFue<#Hf8Wg?|8qcb3yW(Q4HARmjO+jZqu?9=|7Q@u znK%Cb2jiRn|7Q}5p?c8G_MUm{zf1Q{g4lo2`TyW@2j&NK`pWvQpV_DXC!hNNKM96U{{No@OAF9607?gm$Nv8Z zV^CT+^8bGV3`5faC@sVv{Qn<}5B&ch4@w97|NpN&^ZS4IrSJb!k9_&>wDA3Z&^Zp0 zHD^-bWj|=#2UPdN&i@0Y0Z>{1r3u(vaM~mdtx5O0&E|gjAH3`9|DyBX{`cSd@xSTT zpZ}TH{-fgS|Nm#gFf?Ak@d;u><1_2#|NjK>t^fbCh{ZU}3tM;Nzgy2vqHw~Icc}h= z`YYq=|Nn4&<^TT-D2Ann^vnPMr(c5Lw2S}$qu>kw|EHaY;FMFp|NG53jp3HiHFy4} zoc<5TptO*D^8bG@KJov5G7KO8|3B#%0w*5*|3C2v6d(ToKM{rx{r{hE@c;jW1ONZ0 z9s2*j_sWm|Ef>H2PdxnPztP0E|24Z_eFFFUK=~Tf#)tL$L1jPa3~2j$76wpS0Hp~~ zy8tvVoIXKSw(WSh*}O0RJ=cBxpLXUeIQ}Q!`~5#36!zEu|IfMs!Pz(d|3|?$|Nqa1 z;amUzXA_HW|Noy&EXHAG>X}df-FtQsg#+fFhWjB4F8}`z#+Uy8&w$~J|Nm!z@P+^X(?R(B|NrTrG4E|p|NG874tA6OoYVhPPX7L% zdiMYS)HDD8r=Eu5Q~&>`!tlxe|5HyuaLV!j|Ka%9|NqHHq4>!E|H()G|4%yn|9{dU z1g<;#?|=Wb@BfQWfBhe^^Yeeu86Ilwk2ZqGe6yhYJwW|_P~8v8_n`O(VGtWs2Y}KB zXkHLhPh|J%n#}(2)O_BT|EZ_G{%^SU{r}`UKmWJi|Mx%V#{d60H*w%w|NrO0@a_Nq zb4kH>{{PP*i+DkQDm{Qo}}gm3)+p9{q~*Z==V!PowS+dny1|Nn>K?5qF( zXJ3Kh%m4ppUqaxlOaK38UHtz)>jDJB(n03=|Nk@3L2$;||Np`G%>VxxAbk4&|BO@r z|EI(7$^ZY;q3Iy)#Q*g;UoY5cU=7cfAaMo|C=s;|DSg3%YT!} z@BV9bzxo6p^8w{+Q2qwB^hhlomi@pgI7g2BbD^qOxfHUN=zuyRH2CKl{SB z|2?;V{GW0E=l=^ z`u{%%lpZer|DO%R(6o?s{{Me4KKK8B76_mH|3B-@|NogVeER?YOlVpFrH71@|Nn#W ziU0pIj{pCk4#S{yaP0s8qEr9>PrdQy|CF0Q{uiA7_CIplr~jZcJk&d%Y+wM5_oq#e z1E28+%HPOkKlnai{P+JD&wjhtV!_w{=_kJZFTe8r|I7zJ|Ic~y_kaEU|Njf`;J|nP z|1X5$d;k9zLUGZ(|NjZ%`~UwJ;ll*X0NEA2?&^QPiF=5`iMt>DFTDN#e*p;J`v1QG z86%|!P@2fU{{KG;zV`or{0#ov|Np1m`uV^6+V}sNC%^u8 zS@_|MXm&q84L<8H3)=1j<$X{a z4^+;B+I;Bo4-x~*^+N6e0`&z!z{G^@t{s&CjOB61= z@%w-Ao&N}Y`~Uyq+yDO;!SJpB|BFEQ=KueNFnr_x|3VPH{{Md=6c=3k{~wI6{{LS9 z!q9X8P7jy=|Ifel|9>6~U;O_+4}>rL|DOlK&~%V{?*IQ>Xc_>egPb$}|L2@W#o4F+ z{|DicGynh3zV-kAth>Md_uu&OKl}98|DG#8{@3k)`(Lr`dNuei2T-36l%GNMJ}7^K z+IlE)56b@_T+al*3k0MV)K&zK74|71aM;4%`v^#6as z#sB~FVfe!T|M}&;R_yZppX*`4_+cue`R9-@G#%uf`Trk;+phfoKmX3Z|MTwu{6G2jkN^4SzWw)K^XWh6 z><;Djn^oYv4{FEbt@q(qz$5N}2Bi;B8v)b~0PF3N0GXvT^?s$*;&1;Wc76X}a{c@N zi4T7MU;Omf|7EZK{h#&X|Nn{y|NmD!M8c2$|F6J;DnkR1rL7yFT42df9}bz|BWZV`>)gY z>M6Lt56b(XzC5hn2bKGvIv%y`hbI6Aa9a>s27uM}a)Q?ef$9NJ8IaYhVzKb^Q@dr~ z{^wu#{=X7b20Z=!f9Z=q|5v>E|9`@BXuLw>0T#DakN^M2il6-dUquK%B|;6%3@rA5 z+)#e+_y6em$Nz^<+m92+uQ(4b!z%9o|Br(2{r_J9N(*=Y|1U?zcmDq`2VrPB0F8%~ z-TME(>?Q<*(n0Bs|Np`G`v3o>FbqlySO5Pnf#ECv{}+Ss<^TVSLHN@D|HU8-OA8nN z|1W~#!t?+C7oPk7zx=}g{|oN@|G)VD-~Wpq{`%i_^T+?93*Y{GF8lZ&ban?g?}Ntg zKzScDrvs|XLHQY!uW`pcC>>yy0U*7gdH^(Ml+`V-HRX1W^^))ZgSY`TxHJgfIX9Ujo9H{{Jrl;fw$O7sK#{|No0G{QqBe;s5{H zcmMxi^5FmfC69jnpZDO`|ME-U|EC}R`d@$2`~TYgudaj7b_Dg^KzScD)(5J~!F4+F zoxh;^9u(y$7!m)Vass3W)LsPD1E4Yh)E3O@RWV=q@s#z_@Bgz;{rF#b>&O2&Pk;Si z@#6RY)o=d&U-|a`|JG;!|JOXh#I;ZV|3|^k{{OF~7Dh80oBd_iKL3xNd*pxQi~|@r zY1M`Q)sO!FuYQP%;pyT2|Nm7`TzT*Re=xrL|9>S6-}(Q)5`=I6|6c*axBmaHxcUEo zISk+U|G)e?62A8Te>n(W{r|uG>i_>`SD^Uv|No^ReChxHQW(DY|9|O)|Np1l{{Mg3 z!~g%6J^J&1+2ddTo38)(UwY~Lf2a8$!SOHGd?A(r*53o=eNcaoxV#Tb2#7QQDlb53 z0F-_}WdJBWW%kHQw;y%@#lOqy@BgcB{rKN__s9R`p!k3F=l|Mw|NpOg`~QF2b4Xm* zJ^lY5j-UPiUx$pJ|NmbH#r4ns|0fm0^nz(*b3tq*dy&&z`L)mgW9J_IA3ftB3eG$9 z|6pA6@c(}l{NVrpY7oBv|9>?M-~0c+8ieou|6dKmcmDsczVrWo6$sz{|Gx@^ zZ~gyY3Bou3|E~n$8~^`Tg7EeK|0_WF+W-F*Pz*`~L1#8-^*vk906NzhRPKY@ZAfE1p!|#| z`(bg7i-z0>57Gll1EBN+ss}*n30e;r&3!T1X4&`uv3q~~uetN{fA_;*|JS_w{eSJ7 zzyH_2|Nno@yZ`^2p8fw{kBrgcxZ(N#{|zswfYHnarz2#0k=da3#GUW|Gq>INA2ah1 z7$+<~`M>7=@Bej=|3mPj|NrZtX#t!j9{&Gd3&Icn|F4DN`~UyffbhNl|7&3Q?*IQa zcOV#)4ytee{}01exBmaHx`~8u{QqACO$U|N|NpPN2Ei3q|Nn>MEC2sjfbix2|EJvf z|9{n^|NmD#{`Y^?vtR!gJpT2+^6Gc+Sg+}{5C8Qhz5T>hy4HvRR_=q^eBgWwTHk?E z?&FGcba6x)KyM2|>j8@;pRe02|M5TX?9cyo_kRAL`SjQSb+3Q_U;pm!{|z7h|6l&@ z|NoZf|Nl24;}`$`H_`(m+lkD6_Wyqa2!qOp2fzQ9U;6OB;pzYX4Ns8pMe z55tfC|F3@t!F3P+{|Dm-|NqzBN5c31|E~q%yZ`^!LNP2Y)ZG66AB=DP|6c>bH~;^y z2H_k3|5rnC)%E}XtFEEq%B%nXS6=!5zvtHf|7)K7|G)b2|Nm>A{rF@uwH-7xD zy7K+M^WsncLFY9ncHYQBDfdD76_js5`4^OriO>76bbyF|uo?Ai;PC@cx&qY$DHCN> z`Y!ldFZ=e%ZS9Z$HMf5LZvgcNU;O^R{>`8N8{hx?zv;vO|101B|KIcK|NmytI1vcH z{Qtk1))-_D5^j3_|33zP1}UE!pZ@=kf}i~V--wK%X`$iK|Nn3dO$+r8{{M&L`~Uyf z-~0c+4u{!TFY~ypNOyKJ|9=am7|l$K^o5ib;OX%B z|NqS({Ote#W@uUf)mKeV|NjT$C;$I9A>+sY|2IBD!VmxdZ-C(k|Nl3D@csY)8=x4J z7V7W*{}039G;sU>|2i1H_5XhzG#%95{QtiemIgpHG#$)&@c;k%XHfj&&;Ru=e*d3v z|0j6tt>E~#|Db*PdXwKi5h!1)&j70PL1Vn2wmSB5AJndc#VaW^NFO5us0;y>1EBr@ zsB8hHGf-O~y@rSi`D}Vk^JoNK_^TS{NJD>dezX25g@BaMX`tjfYt)Kq?-~8$S z|A}w@|8ISThF|~x-wMTTumAri7Q^&_X>>D@`7i(fZ-wC(|Npll;g%PW`UzA=wLJU( zAA~_^0gRvi|KAM5PyYXJ2I0s5|2M(#qyPV#9{&H|2*VHl|8Ioh`~Uwpg3`gg|Nk3c z`0oGz4R;W@{`UX>^|v4xln&}{{{IigH~#-`y!rqC!bkuAZ+!m$|Hfzk|8IQx_y5M1 zzyHs8^y`29tsnoZFMa=SKI`LugQ@R7%C(&F2G{wZ{uwA=g5n;f+y~`fFeW9=k<~)t zA5?#U(g3Io0NDZRSAx=8cBhm;&1QY;WnZt^t@`;t|J<+tEsuZw?|t^`|HgNJ{%?8z z=l`}(|Nd|P{2z>Gzk|ea`|JPz;rPw}|Lx>rBy-?t=hgrJZP@V3|Nq;NF)S@S|Np-g z89#&cVOyX6{|~|~PyhdKd4j;Ov;dm-fa8b%|2IGQ|Gx=_@Bjbb1WgBx_x}HHyo-cE z>EQPN{|zvF>;L}-5We~Uf7|W<|5rZ!|9|s~|Nl2V|NnpU%fJ6Ozxw@u!P8&=8*l&k zUvvG(f5!!%{u@pI_+P#6UI_zeTn6 z-EaQ??||XA|NnQ8i(zKK=-2=McVNS>{{QcQ;`W#S|D)g+|NplkT zUDp2kUv=}>|Bk1>|4)4J`~TJtfBx_I`1k+L&;S1K`tl!)H-7&Af6}}E|GVB&jyvD} z{}0D+{{QcU;n)BFcVffPbO1{a9WVd?2jdt2|98Of^Z)r~k|F?oLG##`&`2Qb_@Bjbb0>z*-(0up*e>lGL|9|tH|NrMa{{Mg5DuCr8DF-04fL4d!>!$Ju9(a^XtFMhF|}yZ~y+^`Rw=qNiTo@ z-}2$_|6L#d{@?Za-~ZiT|HJX(kN^L7zoR04`~QD848MVtGoZ4j>&^fFVEp?3|1J=I z_5Xht6nDP*|G)Dk8h-Krek8-~0c+1%&VZ|KA5{-@o|(f5+?p|989s(f|JMc>DMNj(30l zF9NmoAN>5^cJJr^;LTtEgZAVaPJ4e9p6@|<4^-xZ;vN(qpt2bhH?)a+P#QqQKPa7n z>;%~jas$XM&~m_N!Lt&FHNXD*Z~67V=Fac`-7kLs?|b?C|E3Rr|L^|%_y3+R|Nig& z`v3plZxFoY%m4pVKm7mS^NzY0o(@3i0Vyqj(nI&_|NoIOEG=}s{Qn<>!RY~-20-bc z^ZEb(VEpX=|4wK+=y>}7KO8^#|G(og1h+r_|G)ha1jEz8ga7~AK=}Uu|7}pb;OYPW zJKrGVfB$#A`}2S2yFdSDJ^S^)%?m_Vn!iY2gwzHm%0ptd-TlxjSZUdDA^PiMDto`-hb>px9^*4Y2 z?|J$AfB&oB|5tzb^MCK>zyJ4s`TKw0xBn=3<>&wZC%*sxzmE*u`~Ls`-gh|g+yDQ2 z&@pJP3WQ%n`lg`%Y4@xD|55PE|NpyRAaK|7|Nr3_nhrXj{{IihPyYY!1mVa3|967$ zqyPUqAN~K|@em0=`2TkQ&;OyD zzWxX8!!(%j?wVlDMs0BTg5n;z%m>E_v-imzSqD1FMj{$|2|OsfBpM^|F?ht4}AL%$9um0|G)h6|Ns3Th`{gv z|L@0wG1AYw|Nr|y`0fAyeaQID|Np(n`1Sw)y`c2)3NmH|8n^0s`Tsv0zxe;Z=Q$F7 z_Wyr33_tzR5g+qA%O4=QKDd99uUyjBYy_u#r7 z6fdO2BPD7urvT_hl2W{pfr%)E3G&4PK5p1pC8>e{{CNl;rIXkH^2W+c=P-J z%y+;4@A~rh|ADW6{~!4F@BhJX|NkHSj=;OW{r|rhR33c%|9>Jb{Nexq3CQ^U|Nj%v zFiQG(_y2!CGJgC2e?JJn`TxHkhF|~x-~amm|2`Og_5Xk0%m4p-Vfe-W|GhB${Qv)6 zP9{fB5%*-^agTyzwo*5pZ|SUfB6sEd#OL|^=fdL59;HA@;xl>QOf*!Cdk?iN}`i2y^u5jYIA_< z9#9&9wFyCK05m3%)g_@l?Yg_ex}P7N*8l#Wb@KQBiLZbEpZNCo|EceO|6lXz&;Ntp z{{BDo{onsX-~azV^yB~k!$^4lkN^Kyef|G`>c{{8C*i^1H1gs9|B2Y}dq}+ks$0PL z-T(g+-~InT0fyiH|33kS-~9hS0hAV?=>U`#`d|J355_P5|L=$5z8C-hgYonK|NB7r z+5i82&;I}K1>vXv|Mx!m|9|H5|Nl3?{r~^KhyVW%yhp+x{{KJt@$dfwpZ@;e_2KXT z*{}Zm?|b&^f8Wzz|Ld;&{O`W}>wmMkpZ^=re7lMPG^Pv6OQ3uY%3I*@O=D#M<$F-L z)4skZlrZq80nivx@&s}5rtRAHYrkK0+VJOp_#Tjd|NNi)?$7_p@BjRt|MBntz2E-* zKm7gQ|05v$!k|Ns9a7=8!o zhfaF?|33&%d%pZej?{}~_u{9pU!@Bf3}|NTGu1BUi_?VFA;dci~s*8zx@Ay@$3KpH@*M=|InxZ{||xU84Vx){O|vfFMt0Z{_^+# z_K$!6&wKOd|HPM&@sXYfzyC*W{r(@c&&qV}$HyvNm)#)ua`g&<*WV%MdvLtN%X?6` z!{T6|X^>kWbB3UD36=(6eFIP$0Hx)uE(w#x&y$=s{QBs;@z4K^6Mz0seEsMDw2y!O zPyhJm|J=`i|8M>F@Bi_iQ2Yx-|NnpdCmR0o|Nn7lJ+bB6|Nkq#{Qp1a^Z)gY zE2E{~tldAn`B%{vZAJ@Bh)S|Nig)^7sF;_kaFRdHwtUXb9)4(q-j zci!~pzu)%1|Lbo2{XgT=pZ_yH{{`duU;qB!_T%6G6ThJNHeOL|C2cIi68&}gD|LX3B%jI{{O$> z3k0wK^8Y^w@A>-w|DG@Z|L^|t|No({|No!(2E`yYGXC=a|A{Y{ zHUpRUpgC1go<}b4L1709Lr|GIcGk+m8h<*C^ z|Np0c{r`XJCm#Ic|Nm1^eDcTt{}}lD|Nkey;lN-2|38V0LF&GP%=`EM)X#taPl7Ng zo&NaufBVic!RN<1(;g*(^E{|t zM9%Y|yaHb6Oht@&g@&RjvIa)ciHmyKM1Ft{QG~> zi@*Qpeuv9oW|Np1aF-+ahfB(t3Ak4hoy0o9A(*JxE;u zD#Ji&8stAv`Ua(Q^g1D z_A7M$0G19wVFC)9#EGJ&i=PJCZ}`3foDR1B`yaUL-~WoM|Nc*X{qO(6U;q9u{Qd9$ z!ax82F9PAe|Nk%g`~UxnfB*k){Qv*|&j0`aANv3Q|Iz>d|6d>igVW5v|NqY;V^Es< z`~Uyp-~a#b`u+d^#$W&bum155To=v%_V+&s&-?oK|GX~{Joo*d|Mk~@|4-cW>py5+ zEC^dI`TEFs{;OJ%rd_HGpmHA6_5qc7uy_aMf#DtRu=oej&@=!Vt42x#Ape8XKPVr7 z+6J&TA}AfC^@ym?xMX6x?n{sJ=0A^MX(8sozyDR&{{5f+_W%FIzyAMU{P+L=#sB{Q zUjoAa|Nmct1+V%4|NnYi_}~Bk>;L`#zwR#tF9oHk-~awE0;RE^|Nbw8;UEA0FZ}-R z|AKEI{P+KY_kaI4-u&}FY5%YP&TD@D2d#w!Vap|-x9iV&k^mmF2eorx@ecAI$e&o_ z9h5gfVFSjX@EVR7H4T8uIZ$~ADhsfs15jQ8r2|mj$>5wpmdK^9>CH9D6Bwv1(at%VF;=lK<#8uT1cEIYPR%gfa8X5Go3g6z6?tX zAliHTzyGoO{{7EC_wRr8^?(0+AOHK``{LjKWuP$u5dQK1|FZvR_}~Bkpgh0y%m4pN zKmY$f{k8wXtUz;Hq(V~ za+N1vGy<3JptK5dC&;}Zcf;ZwRK9`IH^^_G^bSh*U<}Ud&~QKxo?*|2`5Q_@(*Y=4 zKw$(5D^Qrh(g7$eL179CTTmE-(gLV#&2AHxY1^-2vEogf-P*5RPMdxnh1V5ZKy64! ze*)B}0QE0nICR(F|1oN&p~AsET4nYEy&%VcnA3dgh74+`3;Ow;vMAwVISEaTk^u+ZtdqTyEUJ? z?bd#s<*?!BQ8-@zZq2vtHmg2&+pPN3ZL#c4uJOXB{+iRS8Zv;}05ghB2CVURn)c^u?!jCdcB5lVrlkfiTEykR2fVKp12< z2!q@*MC1Jb|Nnnr@nioV41U1)@?h@&2QWT6gnt0WXNK@$Tn0uk{~w&s0OrGuXJ7zZ z@BtwYwg7HC0|P%u1KfB92CxMU2=!nK5L^b31xVI0Fw`UY2BgmZ|9`k|Kz#ZC|B|hqJ+q|0vF3U_b;eSel_8DKtPL_9)I{V6aDV z9s`3s8lNAd_yY_>(TgVD n@kl-d8;|5eC?9Sh*mxu#L5znR05uLCB;eW>WF<5XK+OLD{opZ_ literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..169c8d6 --- /dev/null +++ b/main.cpp @@ -0,0 +1,14 @@ +#include "LanPaper.h" +#include +//#include + +//Q_IMPORT_PLUGIN(qico) + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + LanPaper w; + w.show(); + + return a.exec(); +} diff --git a/rc.svt b/rc.svt new file mode 100644 index 0000000..77cf028 --- /dev/null +++ b/rc.svt @@ -0,0 +1,4 @@ +SrcIP#localhost +SrcPort#100 +DesIP#12.21.12.21 +DesPort#100 \ No newline at end of file diff --git a/resource.qrc b/resource.qrc new file mode 100644 index 0000000..401682a --- /dev/null +++ b/resource.qrc @@ -0,0 +1,6 @@ + + + emoticon.ico + big_smile.ico + +