实现部分代码:
cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
,cli(new QTcpSocket(this))
{
ui->setupUi(this);
ui->sendbut->setEnabled(false);
ui->msgedit->setEnabled(false);
ui->disconbut->setEnabled(false);
Widget::connect(cli,&QTcpSocket::connected,this,&Widget::connect_slot);
Widget::connect(cli,&QTcpSocket::readyRead,this,&Widget::ReadyRead_slot);
//建立断开连接信号和槽函数的信号与槽连接
Widget::connect(cli,&QTcpSocket::disconnected,this,&Widget::disconnect_slot);
}
//取消按钮按下槽函数
void Widget::on_disconbut_clicked()
{
//告诉服务器断开连接
QString msg = usrname + ": 离开聊天室";
//将数据发送给服务器
cli->write(msg.toLocal8Bit());
//与服务器断开连接
cli->disconnectFromHost();
}
//断开连接信号槽函数
void Widget::disconnect_slot()
{
//更新状态栏
ui->statlab->setText("未连接服务器");
//改变组件使能
ui->usrnameedit->setEnabled(true);
ui->sipedit->setEnabled(true);
ui->sportedit->setEnabled(true);
ui->sendbut->setEnabled(false);
ui->msgedit->setEnabled(false);
ui->disconbut->setEnabled(false);
//清空文本
ui->msgedit->clear();
ui->usrnameedit->clear();
ui->sipedit->clear();
ui->sportedit->clear();
}