QT中Modbus主机调用sendReadRequest()函数,返回指针对象不为空,也没有错误,但是却不发送finished信号,这是什么原因。
bool a = connect(Reply, &QModbusReply::finished, this, &ModbusData:: ReadReady_RemoMea);
这句信号和槽函数关联语句也被执行,a返回值为true,但是槽函数ReadReady_RemoMea()却没有执行。这是什么原因?
拜托各位大神了,小弟必有重谢,奖励50元。
1.void ModbusData::Modbus_ReadDatas_RemoMea(int serverAddress)
{
if (!ModbusMaster)
return;
QModbusDataUnit readRequest_RemoMea(QModbusDataUnit::InputRegisters,1,100);
if ( auto *Reply = ModbusMaster->sendReadRequest( readRequest_RemoMea, serverAddress))
{
quint16 error_RemoMea = Reply->error();
qDebug() << "error_RemoMea" << error_RemoMea;
if ( !Reply->isFinished() )
{
qDebug() << "1";
bool a = connect(Reply, &QModbusReply::finished, this, &ModbusData:: ReadReady_RemoMea);
qDebug() << a;
qDebug() << "2";
}
else
{
//delete Reply;
}
quint16 error_RemoMea1 = Reply->error();
qDebug() << "error_RemoMea1" << error_RemoMea1;
}
else
{
qDebug() << "request error";
}
}
槽函数:ReadReady_RemoMea()如下
void ModbusData::ReadReady_RemoMea()
{
qDebug() << "完成";
QModbusReply *reply = qobject_cast<QModbusReply *>(sender());
if (!reply)
return;
if (reply->error() == QModbusDevice::NoError)
{
RemoMea_Modbus = reply->result().values(); //返回读取的数据
}
else
{
qDebug() << "reply error";
}
reply->deleteLater(); //delete the reply
}