发包实现
// 基础包
class PacketBase
{
protected:
int m_Size;
packet_header_t Head;
packet_tali_t Tail;
char* Body;
char m_Data[MAX_PACKET_LENTH];
public:
PacketBase();
~PacketBase();
bool pack();
bool unpack();
char* getBody();
packet_header_t* getHead();
packet_tali_t* getTail();
char* getData();
int getSize();
void setSize(int size);
PacketBase& operator =(const PacketBase& packet);
};
//自己写的继承包
class SendPack : public PacketBase
{
public:
SendPack();
bool send_loginpack(int id,int pwd);
private:
};
//包实现
bool SendPack::send_loginpack(int id, int pwd)
{
int sz=sizeof(Login_t);
this->setSize(sz);
this->Body=new char[sz];
Head.funcId=0x01;
Head.optid=0x00;
Head.syn=0x04;//判断包头
//填充包体
Login_t *body = (Login_t*)Body;
//body=malloc(sizeof(id)+sizeof(pwd));
body->id=id;
body->pwd=pwd;
Tail.pack_tail=0x05;
return this->pack();
}
//socket类
class MyTcpSocket
{
public:
static MyTcpSocket *getMySocket();
QTcpSocket *client;
~MyTcpSocket(){p=NULL; isCon=false;}
private:
MyTcpSocket();
static MyTcpSocket *p;
static bool isCon;
};
//socket实现
MyTcpSocket *MyTcpSocket::p = NULL;
bool MyTcpSocket::isCon = false;
MyTcpSocket::MyTcpSocket()
{
if(!isCon)
{
client = new QTcpSocket;
client->abort();
//client->connectToHost(NULL,NULL);
isCon = true;
}
}
MyTcpSocket * MyTcpSocket::getMySocket()
{
if(NULL == p)
p = new MyTcpSocket();
return p;
}
QT知识点
过滤器事件,控件安装过滤器事件,会让事件产生先执行过滤器事件,installEventFilter,实现bool eventFilter(QObject *listen, QEvent *event);
其中如果事件和控件产生冲突,可以使用event->ignore()去忽视掉该事件,从而让事件和控件都可以执行
心得体会和不足
1.没能完成QQ类似的下拉滑动删除效果
2.由于某些特殊原因,可能会停止该项目,实现的属实很抱歉