一般认为,qt中传统的【信号-槽】都是配合类一起使用的,如果仅仅写一个简单的基于控制台的测试程序,如何实现呢?
这里以QUdpSocket为例,在控制台程序中使用lambda语法将接收处理函数直接写在【信号-槽】里,好处是简化了设计,不好是语法晦涩难懂,但一定抛砖引玉:
//创建udp套接字
QUdpSocket *udpSocket = new QUdpSocket();
udpSocket->bind(QHostAddress("127.0.0.1"), 7755);
//lambda表达式使用
QObject::connect(udpSocket, &QUdpSocket::readyRead, [&]()
{
//接收处理
while (udpSocket->hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
udpSocket->readDatagram(datagram.data(), datagram.size(),
&sender, &senderPort);
qDebug()<<sender<<" "<<senderPort;
qDebug()<<datagram;
}
});