标题:请问有没有办法用lambda表达式作为槽函数?
作者:shishirong
日期:2021-06-07 16:43
内容:
比如有一个函数是这样
Device::Read(int addr,int lenth,const QObject* receiver, void (*callBack)())
{
...
connect(this,&this->ReadFinishSlot,receiver,callBack);
}现在想要实现用lambda表达式作为槽函数来调用,比如:
Read(0,1,this,[=](){
});
#1 [wanger233 06-07 17:27]
connect(btn2,&QPushButton::clicked,[=](){
});
详细的里面参数怎么设置还是的去看参考资料
#2 [fsu0413 06-11 21:35]
1楼已经说明了。
补充一点,最好不要使用3参数的lambda表达式connect,最好第三个参数加上一个关联对象,免得因为关联对象被delete导致程序崩溃。
#3 回 fsu0413 的帖子 [20091001753 06-12 02:30]
fsu0413:1楼已经说明了。
补充一点,最好不要使用3参数的lambda表达式connect,最好第三个参数加上一个关联对象,免得因为关联对象被delete导致程序崩溃。 (2021-06-11 21:35)
我记得,发射方 与 接收方,任何一方析构,关联都会自动断开,这是 QObject 自带的功能。
#4 回 20091001753 的帖子 [fsu0413 06-12 06:18]
20091001753:我记得,发射方 与 接收方,任何一方析构,关联都会自动断开,这是 QObject 自带的功能。 (2021-06-12 02:30)
但是三参数的版本没有接收方。
#5 [wwwfffhhh 08-15 13:15]
看看下面的方法是否满足你的要求?
tcpServer = new QTcpServer(this);
tcpServer->listen(QHostAddress::Any, 8888);
//设置响应TCP客户端连接请求的命令
connect(tcpServer, &QTcpServer::newConnection,
[=]()//这里是一个Lamda表达式函数定义
{
OnProcessNewConnectEvent2();
}
);
void MainWindow::OnProcessNewConnectEvent2()
{
if(tcpServer==nullptr)
return;
//取出建立好连接的套接字
QTcpSocket* tcpSocket = tcpServer->nextPendingConnection();
//获取对方的IP和端口
QString ip = tcpSocket->peerAddress().toString();
qint16 port = tcpSocket->peerPort();
QString temp = QString("[%1:%2]:成功连接").arg(ip).arg(port);
ui->textEditRead->setText(temp);
//设置响应接收处理方法(这里也是采用Lamda表达式函数来写的)
connect(tcpSocket, &QTcpSocket::readyRead,
[=]()
{
//从通信套接字中取出内容
QByteArray array = tcpSocket->readAll();
ui->textEditRead->append(array);
//给对方发送数据
&n ..