#include "gddcStateInfo.h" #include "ui_gddcStateInfo.h" GDDCStateInfo::GDDCStateInfo(QWidget *parent) : QWidget(parent) , ui(new Ui::GDDCStateInfo) { ui->setupUi(this); initParam(); } GDDCStateInfo::~GDDCStateInfo() { delete m_tableModel; delete ui; } //初始化参数 void GDDCStateInfo::initParam() { m_tableModel = new QStandardItemModel(); m_tableModel->setHorizontalHeaderItem(0,new QStandardItem("类型")); m_tableModel->setHorizontalHeaderItem(1,new QStandardItem("详细信息")); // m_tableModel->setVerticalHeaderItem(0,new QStandardItem("序号")); ui->tableViewShowIState->setModel(m_tableModel); //栅格显示或隐藏 ui->tableViewShowIState->setShowGrid(true); // 固定表格宽度不可扩展,不可手动调整宽度 ui->tableViewShowIState->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed); // 表格宽度随内容自动扩展 //ui->tableViewShowIState->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); // 表格宽度自动根据UI进行计算,不可手动调整宽度 //ui->tableViewShowIState->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 固定表格高度不可扩展,不可手动调整高度 ui->tableViewShowIState->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); // 表格高度随内容自动扩展 //ui->tableViewShowIState->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); // 表格高度自动根据UI进行计算,不可手动调整高度 //ui->tableViewShowIState->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->tableViewShowIState->setColumnWidth(0,100); ui->tableViewShowIState->setColumnWidth(1,100); m_tableModel->setItem(0,0,new QStandardItem("跟踪源类型")); m_tableModel->setItem(1,0,new QStandardItem("姿态方位角")); m_tableModel->setItem(2,0,new QStandardItem("姿态俯仰角")); m_tableModel->setItem(3,0,new QStandardItem("姿态横滚角")); m_tableModel->setItem(4,0,new QStandardItem("中心点宽坐标")); m_tableModel->setItem(5,0,new QStandardItem("中心点高坐标")); m_tableModel->setItem(6,0,new QStandardItem("可见光焦距")); m_tableModel->setItem(7,0,new QStandardItem("可见光视场角")); m_tableModel->setItem(8,0,new QStandardItem("红外焦距")); m_tableModel->setItem(9,0,new QStandardItem("红外视场角")); m_tableModel->setItem(10,0,new QStandardItem("激光测距值")); m_tableModel->setItem(11,0,new QStandardItem("命令反馈")); m_tableModel->setItem(12,0,new QStandardItem("视频输出类型")); m_tableModel->setItem(13,0,new QStandardItem("红外电子变倍")); m_tableModel->setItem(14,0,new QStandardItem("可见光电子放大")); m_tableModel->setItem(15,0,new QStandardItem("吊舱框架方位角")); m_tableModel->setItem(16,0,new QStandardItem("吊舱框架俯仰角")); m_tableModel->setItem(17,0,new QStandardItem("吊舱框架横滚角")); m_tableModel->setItem(18,0,new QStandardItem("TF剩余百分比")); m_tableModel->setItem(19,0,new QStandardItem("TF卡总容量")); m_tableModel->setItem(20,0,new QStandardItem("TF插卡状态")); m_tableModel->setItem(21,0,new QStandardItem("拍照")); m_tableModel->setItem(22,0,new QStandardItem("视频抓图")); m_tableModel->setItem(23,0,new QStandardItem("连拍")); m_tableModel->setItem(24,0,new QStandardItem("视频连续抓图")); m_tableModel->setItem(25,0,new QStandardItem("录像状态")); m_tableModel->setItem(26,0,new QStandardItem("文件命名")); m_tableModel->setItem(27,0,new QStandardItem("当前图像反馈")); m_tableModel->setItem(28,0,new QStandardItem("载荷类型")); m_tableModel->setItem(29,0,new QStandardItem("红外机芯")); m_tableModel->setItem(30,0,new QStandardItem("可见光机芯")); m_tableModel->setItem(31,0,new QStandardItem("陀螺仪")); m_tableModel->setItem(32,0,new QStandardItem("角度传感器")); m_tableModel->setItem(33,0,new QStandardItem("电机")); m_tableModel->setItem(34,0,new QStandardItem("压缩")); m_tableModel->setItem(35,0,new QStandardItem("综合控制")); m_tableModel->setItem(36,0,new QStandardItem("吊舱准备状态")); m_tableModel->setItem(37,0,new QStandardItem("红外伪彩")); m_tableModel->setItem(38,0,new QStandardItem("红外图像增强")); m_tableModel->setItem(39,0,new QStandardItem("当前载荷版本")); m_tableModel->setItem(40,0,new QStandardItem("目标定位经度")); m_tableModel->setItem(41,0,new QStandardItem("目标定位纬度")); m_tableModel->setItem(42,0,new QStandardItem("目标海拔高度")); m_tableModel->setItem(43,0,new QStandardItem("姿态指示完成反馈")); m_tableModel->setItem(44,0,new QStandardItem("目标宽")); m_tableModel->setItem(45,0,new QStandardItem("目标高")); m_tableModel->setItem(46,0,new QStandardItem("目标类型")); m_tableModel->setItem(47,0,new QStandardItem("跟踪状态")); m_tableModel->setItem(48,0,new QStandardItem("最高温")); m_tableModel->setItem(49,0,new QStandardItem("配置保存")); m_tableModel->setItem(50,0,new QStandardItem("伺服状态")); m_tableModel->setItem(51,0,new QStandardItem("超温报警")); m_tableModel->setItem(52,0,new QStandardItem("红点指示")); //ui->tableViewShowIState->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(255,228,225);color: black;}"); } //udp数据接收 void GDDCStateInfo::UDPMessageReceive(QByteArray &da,int size) { QByteArray data = da; //data.resize(size); qDebug()<setItem(28,1,new QStandardItem(str)); /*****自检结果*****/ //红外机芯 if((data.at(3)&'\x01')==0x01){ str = "正常"; } else{ str = "异常"; } m_tableModel->setItem(29,1,new QStandardItem(str)); //可见光机芯 if((data.at(3)>>1)&'\x01'){ str = "正常"; } else{ str = "异常"; } m_tableModel->setItem(30,1,new QStandardItem(str)); //陀螺仪 if((data.at(3)>>2)&'\x01'){ str = "正常"; } else{ str = "异常"; } m_tableModel->setItem(31,1,new QStandardItem(str)); //角度传感器 if((data.at(3)>>3)&'\x01'){ str = "正常"; } else{ str = "异常"; } m_tableModel->setItem(32,1,new QStandardItem(str)); //驱动板-电机 if((data.at(3)>>4)&'\x01'){ str = "正常"; } else{ str = "异常"; } m_tableModel->setItem(33,1,new QStandardItem(str)); //压缩存储 if((data.at(3)>>5)&'\x01'){ str = "正常"; } else{ str = "异常"; } m_tableModel->setItem(34,1,new QStandardItem(str)); //综合处理 if((data.at(3)>>6)&'\x01'){ str = "正常"; } else{ str = "异常"; } m_tableModel->setItem(35,1,new QStandardItem(str)); //吊舱准备状态 if((data.at(3)>>7)&'\x01'){ str = "已准备好"; } else{ str = "未准备好"; } m_tableModel->setItem(36,1,new QStandardItem(str)); /*****吊舱状态1******/ //拍照 if(data.at(4)&'\x01'){ str = "正在拍照"; } else{ str = "未拍照"; } m_tableModel->setItem(21,1,new QStandardItem(str)); //视频抓图 if((data.at(4)>>1)&'\x01'){ str = "正在抓图"; } else{ str = "未抓图"; } m_tableModel->setItem(22,1,new QStandardItem(str)); //连拍 if((data.at(4)>>2)&'\x01'){ str = "正在连拍"; } else{ str = "未连拍"; } m_tableModel->setItem(23,1,new QStandardItem(str)); //视频连续抓图 if((data.at(4)>>3)&'\x01'){ str = "正在连续抓图"; } else{ str = "未连续抓图"; } m_tableModel->setItem(24,1,new QStandardItem(str)); //录像状态 if((data.at(4)>>4)&'\x01'){ str = "正在录像"; } else{ str = "未开始录像"; } m_tableModel->setItem(25,1,new QStandardItem(str)); //文件命名 if((data.at(4)>>5)&'\x01'){ str = "信息导入完毕"; } else{ str = "未成功导入"; } m_tableModel->setItem(26,1,new QStandardItem(str)); //TF插卡状态 if((data.at(4)>>6)&'\x01'){ str = "TF卡已插入"; } else{ str = "TF卡未插入"; } m_tableModel->setItem(20,1,new QStandardItem(str)); //超温报警状态 if((data.at(4)>>7)&'\x01'){ str = "超温"; } else{ str = "未超温"; } m_tableModel->setItem(51,1,new QStandardItem(str)); //红点指示 if(data.at(5)&'\x01'){ str = "开"; } else{ str = "关"; } m_tableModel->setItem(52,1,new QStandardItem(str)); //备用 //红外图像增强 str = QString::number((data.at(5)>>3)&'\x0F'); m_tableModel->setItem(38,1,new QStandardItem(str)); //备用 //备用 /*****吊舱状态2******/ //备用 //跟踪源类型 if(data.at(6)&'\x02'){ str = "可见光"; } else{ str = "红外"; } m_tableModel->setItem(0,1,new QStandardItem(str)); //红外电子变倍 str = QString::number(((data.at(6)>>2)&'\x7F')*0.1,'f', 1); m_tableModel->setItem(13,1,new QStandardItem(str)); //配置保存 if(data.at(7)&'\x01'){ str = "保存成功"; } else{ str = "未保存"; } m_tableModel->setItem(49,1,new QStandardItem(str)); //可见光电子变倍 switch((data.at(7)>>1)&'\x03') { case 0: str = "1x"; break; case 1: str = "2x"; break; case 2: str = "4x"; break; default: str = "未知"; break; } m_tableModel->setItem(14,1,new QStandardItem(str)); //红外伪彩-色带 switch((data.at(7)>>3)&'\x1F') { case 0x00: str = "白热"; break; case 0x01: str = "黑热"; break; case 0x02: str = "彩虹"; break; case 0x03: str = "高对比度彩虹"; break; case 0x04: str = "铁红"; break; case 0x05: str = "熔岩"; break; case 0x06: str = "天空"; break; case 0x07: str = "中灰"; break; case 0x08: str = "灰红"; break; case 0x09: str = "紫橙"; break; case 0x0b: str = "警示红"; break; case 0x0c: str = "冰火"; break; default: str = "未知"; break; } m_tableModel->setItem(37,1,new QStandardItem(str)); /*********伺服状态********/ //红外伪彩-色带 switch((data.at(7)>>3)&'\x1F') { case 0x00: str = "待命"; break; case 0x01: str = "关伺服"; break; case 0x02: str = "手动"; break; case 0x03: str = "收藏"; break; case 0x04: str = "数引"; break; case 0x05: str = "航向锁定"; break; case 0x06: str = "扫描"; break; case 0x07: str = "跟踪"; break; case 0x08: str = "垂直下视"; break; case 0x09: str = "陀螺自动较漂"; break; case 0xA0: str = "陀螺温度较漂"; break; case 0x0B: str = "航向随动"; break; case 0x0C: str = "归中"; break; case 0x0D: str = "手动陀螺较漂"; break; case 0x0F: str = "姿态指引"; break; default: str = ""; break; } m_tableModel->setItem(50,1,new QStandardItem(str)); //吊舱框架方位角 dou = (data.at(9)+data.at(10)*256)*0.01; str = QString::number(dou,'f', 2); m_tableModel->setItem(15,1,new QStandardItem(str)); //吊舱框架俯仰角 dou = (data.at(11)+data.at(12)*256)*0.01; str = QString::number(dou,'f', 2); m_tableModel->setItem(16,1,new QStandardItem(str)); //吊舱框架横滚角 dou = (data.at(13)+data.at(14)*256)*0.01; str = QString::number(dou,'f', 2); m_tableModel->setItem(17,1,new QStandardItem(str)); //当前载荷版本号 str = QString::number(data.at(15)>>4) + "." + QString::number(data.at(15)&'\x07'); m_tableModel->setItem(39,1,new QStandardItem(str)); //红外视场角 dou = ((UINT8)data[16]+(UINT16)data[17]*256)*0.1; str = QString::number(dou,'f', 1); m_tableModel->setItem(9,1,new QStandardItem(str)); //TF使用容量百分比 str = QString::number((UINT8)data.at(18))+"%"; m_tableModel->setItem(18,1,new QStandardItem(str)); //可见光视场角 dou = ((UINT8)data.at(19)+(UINT16)data.at(20)*256)*0.1; str = QString::number(dou,'f', 1); m_tableModel->setItem(7,1,new QStandardItem(str)); //TF卡总容量 dou = ((UINT8)data.at(21)+(UINT16)data.at(22)*256)*0.1; str = QString::number(dou,'f', 1); m_tableModel->setItem(19,1,new QStandardItem(str)); //红外焦距 dou = ((UINT8)data.at(23)+(UINT16)data.at(24)*256)*0.1; str = QString::number(dou,'f', 1); m_tableModel->setItem(8,1,new QStandardItem(str)); //可见光焦距-白光 dou = ((UINT8)data.at(25)+(UINT16)data.at(26)*256)*0.1; str = QString::number(dou,'f', 1); m_tableModel->setItem(6,1,new QStandardItem(str)); //激光测距距离 str = QString::number((UINT8)data.at(27)+(UINT16)data.at(28)*256); m_tableModel->setItem(10,1,new QStandardItem(str)); //目标定位经度 flo = m_uint32_to_float(data.at(29),data.at(30),data.at(31),data.at(32)); str = QString::number(flo,'f',6); m_tableModel->setItem(40,1,new QStandardItem(str)); //目标定位纬度 flo = m_uint32_to_float(data.at(33),data.at(34),data.at(35),data.at(36)); str = QString::number(flo,'f',6); m_tableModel->setItem(41,1,new QStandardItem(str)); //目标海拔高度 str = QString::number(data.at(37)+data.at(38)*256); m_tableModel->setItem(42,1,new QStandardItem(str)); //最高温-温度 // dou = (data.at(39)+data.at(40)*256)*0.1; // str = QString::number(dou,'f',1); // m_tableModel->setItem(42,1,new QStandardItem(str)); //吊舱姿态方位角 dou = (data.at(41)+data.at(42)*256)*0.01; str = QString::number(dou,'f',2); m_tableModel->setItem(1,1,new QStandardItem(str)); //吊舱姿态俯仰角 dou = (data.at(43)+data.at(44)*256)*0.01; str = QString::number(dou,'f',2); m_tableModel->setItem(2,1,new QStandardItem(str)); //吊舱姿态横滚角 dou = (data.at(45)+data.at(46)*256)*0.01; str = QString::number(dou,'f',2); m_tableModel->setItem(3,1,new QStandardItem(str)); //当前显示图像反馈 switch (data.at(47)) { case 0x00: str = "红外"; break; case 0x01: str = "可见光"; break; case 0x02: str = "上下分屏"; break; case 0x03: str = "可见光画中画"; break; case 0x04: str = "红外画中画"; break; case 0x05: str = "左右分屏"; break; default: str = "未知"; break; } m_tableModel->setItem(27,1,new QStandardItem(str)); //接收到的命令字反馈 str = QString::number(data.at(48)); m_tableModel->setItem(11,1,new QStandardItem(str)); //姿态指示完成反馈 switch (data.at(49)) { case 0x12: str = "姿态指示中"; break; case 0x13: str = "姿态指示完成"; break; default: str = "------"; break; } m_tableModel->setItem(43,1,new QStandardItem(str)); //跟踪中心点宽方向坐标 str = QString::number((UINT8)data[50]+(UINT16)data[51]*256); m_tableModel->setItem(4,1,new QStandardItem(str)); //跟踪中心点高方向坐标 str = QString::number((UINT8)data[52]+(UINT16)data[53]*256); m_tableModel->setItem(5,1,new QStandardItem(str)); //目标宽 str = QString::number((UINT8)data.at(54)+data.at(55)*256); m_tableModel->setItem(44,1,new QStandardItem(str)); //目标高 str = QString::number((UINT8)data.at(56)+data.at(57)*256); m_tableModel->setItem(45,1,new QStandardItem(str)); //目标类型 switch (data.at(58)) { case 0x00: if(data.at(6)&'\x02'){//可见光 str = "人"; } else{//红外 str = "车"; } break; case 0x01: if(data.at(6)&'\x02'){//可见光 str = "小汽车"; } else{//红外 str = "人"; } break; case 0x02: if(data.at(6)&'\x02'){//可见光 str = "公交车"; } break; case 0x03: if(data.at(6)&'\x02'){//可见光 str = "卡车"; } break; default: str = "未知"; break; } m_tableModel->setItem(46,1,new QStandardItem(str)); //跟踪状态 switch (data.at(59)) { case 0x00: str = "空闲状态"; break; case 0x01: str = "稳定跟踪"; break; case 0x02: str = "记忆跟踪"; break; case 0x03: str = "目标丢失"; break; case 0x05: str = "截获状态"; break; default: str = "未知"; break; } m_tableModel->setItem(47,1,new QStandardItem(str)); //最高温 dou = (data.at(60)+data.at(61)*256)*0.1; str = QString::number(dou,'f',1)+"℃"; m_tableModel->setItem(48,1,new QStandardItem(str)); // } } bool GDDCStateInfo::checkdata(QByteArray buffer,int length, int type) { if(length!=64){ return false; } if((buffer.at(0) != '\xFC')||(buffer.at(1) != '\x2C')||buffer.at(63) !='\xF0') { return false; } if(type==1) { //亦或校验 // for(int i = 2;i<62;++i) // { // buffer.at(i)^buffer.at(i+1); // } } else if (type==2) { //和校验 } return true; }