先宏定义一个回调函数
注意,我们下想在哪个类里面调用,就必须要把Chat改成自己类的名字(我是在chat这个界面调用的)
// 这里我们定义一个回调函数用于不断监听客户端发送过来的数据)
// 这里因为我们是调用非静态成员,所以我们需要给这个函数加上我们回调函数的类
typedef void (Chat::*Receive)(std::string);
定义一个函数,这个函数可以传入回调函数
// 这里我们初始化服务端,当有消息发送的时候会触发回调函数(这里我们需要传入端口号)
static void startService(Chat *chat,Receive receive,int port);
这个函数触发回调函数的逻辑如下
// 触发回调函数,把我们接受到的数据传入
// 这里因为是触发非静态成员,所以我们这里就把 (chat->*receive) 当成了一个函数整体
(chat->*receive)(recv_buf);
然后我们需要调用函数并把我们需要回调的函数传进去
// 启动服务
SocketUtil::startClientBack(this,&Chat::newDataRead,port,address);
我们的回调函数定义如下
// 当我们的socket获取到数据的时候,调用这个函数
void Chat::newDataRead(std::string data) {
// 列表显示数据
QString show = "对方:";
// 这里加上我们收到的数据
show.append(QString::fromStdString(data));
// 消息到列表中
addData(show);
}