协议:tcp传输协议。
通信:信号槽异步通信机制
服务器:linux
在聊天室程序中,对于上线用户采用了,按钮实现,每上线一个用户,创建一个按钮。在使用按钮时涉及到按钮点击事件,可以通过信号槽,当点击时,通过sender强转为((QPushButton*)sender()) 获取按钮的指针,注意:强转一定要在外层加()作为一个整体
msgname=((QPushButton*)sender())->text();
msg=strlist.at(2)+QString(":")+strlist.at(3)+QString(":")+strlist.at(1);
for(;j<i;j++)
{
if(button[j]->text()==msg)
break;
}
if(j==i)
{
button[i]=new QPushButton(msg,ui->widget);
button[i]->setFixedSize(165,20);
button[i]->move(0,by);
//button[i]->setStyleSheet("background-color:rgb(0,244,0)");
by+=20;
button[i]->show();
connect(button[i],SIGNAL(clicked()),this, SLOT(onbutton()));
同时,在项目中,在对消息处理时,要为不同的消息进行,加包头处理,对所有信息,集中处理,然后,在转发,不然,容易干扰其他聊天
。对消息处理需要使用的几个处理函数char *token=strtok(rmsg,":"); while(token!=NULL) { printf("%s\n",token); pmsg[i]=token; token=strtok(NULL,":"); i++; }QString usertext=QString::fromUtf8(sock->readAll().data());usertext.trimmed(); //去空白字符QStringList strlist=usertext.split(":");在不同对话框中,如果,需要传输数据,可以通过定义对象方法实现。
该项目使用按钮作为对象,实现和管理,都有些麻烦,建议使用tree空间实现,tree在点击时,会输出参数。能知道你点击的位置,更方便。