官方文档
查看手册
可以看出,如果想要把信号和槽函数联系起来,通过connect()方法即可;connect()的参数:
sender:产生信号的对象
signal:信号的名字
method:槽函数
示例
UdpReceiver::UdpReceiver(QObject *p) : QObject(p)
{
//udp通信
uSocket = new QUdpSocket;
//绑定ip和端口号
uSocket->bind(QHostAddress("127.0.0.1"), PORT);
//连接信号和槽函数
connect(uSocket, SIGNAL(readyRead()), SLOT(receive()));
}
readyRead()是QUdpSocket类提供的信号,receive()是自己定义的槽函数,是UdpReceiver这个类的方法
void UdpReceiver::receive()
{
QByteArray byteArray;
while (uSocket->hasPendingDatagrams())
{
byteArray.resize(uSocket->pendingDatagramSize());
uSocket->readDatagram(byteArray.data(), byteArray.size());
//抛出数据改变的信号
emit(datachanged(byteArray));
qDebug() << toHex(byteArray);
}
}
QString UdpReceiver::toHex(const QByteArray &byteArray)
{
QString str;
for (int i = 0; i< byteArray.length(); i++)
{
QString byteStr = QString::number(static_cast<uchar>(byteArray[i]), 16);
if (byteStr.length() == 1) str = str + "0" + " " + byteStr;
else str = str + " " + byteStr;
}
return str;
}
我们可以去官方文档里面看一下QUdpSocket提供了哪些信号
按照顺序找下来,就看到了我们这里使用的信号了