查看完整版本: [-- 请问有没有办法用lambda表达式作为槽函数? --]

QTCN开发网 -> Qt基础编程 -> 请问有没有办法用lambda表达式作为槽函数? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

shishirong 2021-06-07 16:43

请问有没有办法用lambda表达式作为槽函数?

比如有一个函数是这样

  1. Device::Read(int addr,int lenth,const QObject* receiver, void (*callBack)())
    {
        ...
        connect(this,&this->ReadFinishSlot,receiver,callBack);
    }
现在想要实现用lambda表达式作为槽函数来调用,比如:
  1. Read(0,1,this,[=](){

    });



wanger233 2021-06-07 17:27
   connect(btn2,&QPushButton::clicked,[=](){

    });
详细的里面参数怎么设置还是的去看参考资料

fsu0413 2021-06-11 21:35
1楼已经说明了。
补充一点,最好不要使用3参数的lambda表达式connect,最好第三个参数加上一个关联对象,免得因为关联对象被delete导致程序崩溃。

20091001753 2021-06-12 02:30
fsu0413:1楼已经说明了。
补充一点,最好不要使用3参数的lambda表达式connect,最好第三个参数加上一个关联对象,免得因为关联对象被delete导致程序崩溃。 (2021-06-11 21:35) 

我记得,发射方 与 接收方,任何一方析构,关联都会自动断开,这是 QObject 自带的功能。

fsu0413 2021-06-12 06:18
20091001753:我记得,发射方 与 接收方,任何一方析构,关联都会自动断开,这是 QObject 自带的功能。 (2021-06-12 02:30) 

但是三参数的版本没有接收方。

wwwfffhhh 2021-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);

//给对方发送数据
                QString str = "abcd";
                tcpSocket->write(str.toUtf8().data());
            }
    );

    //设置响应远方断开处理方法(这里也是采用Lamda表达式函数来写的)    
    connect(tcpSocket, &QTcpSocket::disconnected,
            [=]()
            {
                //经过测试这里的tcpSocket虽然在调试的时候QT提示是无效指针,但实际确实是等于原来有效的tcpSocket指针值
            }
    );
}



查看完整版本: [-- 请问有没有办法用lambda表达式作为槽函数? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled