QT emit信号的时候出问题,“底层由于接收到。。。”出错。
写程序的过程中,要用UDP接数,并解析后传输到别的类里面去。
void CNetMng::slot_ReceiveNavData()
{
if (m_pUdpNavReceive->hasPendingDatagrams())
{
QByteArray datagram;
int size=m_pUdpNavReceive->bytesAvailable();
datagram.resize(size);
m_pUdpNavReceive->readDatagram(datagram.data(),datagram.size());
STNavDataPkg *navDataPkg = new STNavDataPkg();
if (datagram[8]==0xd4||datagram[8]==0xd5)
{
if (datagram[8]==0xd4)
m_sysType=NAV_SYS_GPS;
else
m_sysType=NAV_SYS_BD2;
//memcpy(&m_navDataPkg,datagram.data(),pkgSize);
navDataPkg = (STNavDataPkg*)(datagram.data());
emit sig_NavPkgIUpdated(m_sysType,navDataPkg->navCodePkgI);
}
}
}
代码如上,就在最后一行 emit sig_NavPkgIUpdated出问题,如果我把他注释掉,就不会报错,运行也正常,但是加上这一行代码之后就会报错。如果我不把这个信号connect到别的slots,也不会报错。
void CNetMng::sig_NavPkgIUpdated(EnumNavSysType _t1, STNavCodePkgI _t2)
{
void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)), const_cast<void*>(reinterpret_cast<const void*>(&_t2)) };
QMetaObject::activate(this, &staticMetaObject, 2, _a);
}
报错后,会跳到上面这一段代码里,一直也找不到原因。