光电吊舱页面优化;增加光电吊舱遥测信息解析显示;

pull/3/head
caoyuhui 8 months ago
parent 04ce4e937e
commit b8d3691202

@ -23,6 +23,7 @@ GDDCSet::~GDDCSet()
void GDDCSet::initWindow()
{
this->setWindowTitle("通信设置");
setAttribute(Qt::WA_QuitOnClose,false);
}
void GDDCSet::initUDPSocket()
{

@ -7,7 +7,6 @@
#include <windows.h>
#include <QDir>
#define CONFIG_PATH "config.ini"
@ -35,7 +34,7 @@ GDDCdlg::~GDDCdlg()
{
//关闭定时器
GDDCControlTimer->stop();
delete GDDCControlTimer;
//停止所有通信
stopConnectURL1();
stopConnectURL2();
@ -43,6 +42,8 @@ GDDCdlg::~GDDCdlg()
stopConnectUDPCtrl();
stopConnectTCPCtrl();
delete m_DlgGDDCSet;
delete m_tableModel;
delete ui;
}
@ -159,6 +160,86 @@ void GDDCdlg::initParam()
connectFlag.resize(10,false);
ui->pushButShowCmdArea->setIcon(QIcon(":/res/down.png"));
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;}");
}
@ -287,16 +368,16 @@ void GDDCdlg::mouseMoveEvent(QMouseEvent *event)
{
qDebug() << this->geometry().x();
qDebug() << this->geometry().y();
QPoint sPoint1=event->globalPos();
QPointF sPoint1=event->globalPosition();
//qDebug()<<"相对于屏幕坐标1:"<<"("<<sPoint1.rx()<<","<<sPoint1.ry()<<")";
QPoint sPoint2=QCursor::pos();
QPointF sPoint2=QCursor::pos();
//qDebug()<<"相对于屏幕坐标2:"<<"("<<sPoint2.rx()<<","<<sPoint2.ry()<<")";
QPoint windowPoint=this->mapFromGlobal(sPoint2);
QPointF windowPoint=this->mapFromGlobal(sPoint2);
//qDebug()<<"相对于窗口坐标:"<<"("<<windowPoint.rx()<<","<<windowPoint.ry()<<")";
QPoint widgetPoint=ui->WgtffmpegVideo->mapFromGlobal(sPoint1);
QPointF widgetPoint=ui->WgtffmpegVideo->mapFromGlobal(sPoint1);
//qDebug()<<"相对于控件坐标:"<<"("<<widgetPoint.rx()<<","<<widgetPoint.ry()<<")";
//更新LineEdit信息
@ -329,39 +410,48 @@ void GDDCdlg::resizeUI()
double GDDCPageWidth = (double)(this->width());
//qDebug()<<"宽度,高度:"<<GDDCPageHeight<<GDDCPageWidth;
/******控制指令位置和大小设置*****/
/******控制区位置和大小设置*****/
double cmdAreaHeight;
double cmdAreaWidth = GDDCPageWidth;
double cmdAreaWidth = GDDCPageWidth-250;
if(ui->tabWidget->isVisible()){cmdAreaHeight = 250;}
else{cmdAreaHeight = 0;}
ui->tabWidget->setGeometry(0,GDDCPageHeight-cmdAreaHeight,(int)cmdAreaWidth,(int)cmdAreaHeight);
/*******视频区域位置和大小设置********/
double VideoAreaHeight = GDDCPageHeight-cmdAreaHeight; //视频区域高度
double VideoAreaWidth = GDDCPageWidth; //视频区域宽度
/*********状态区位置和大小设置***********/
double stateAreaHeight = GDDCPageHeight;
double stateAreaWidth;
if(ui->tableViewShowIState->isVisible()){stateAreaWidth = 250;}
else{stateAreaWidth = 0;}
ui->tableViewShowIState->setGeometry(GDDCPageWidth-stateAreaWidth,0,stateAreaWidth,stateAreaHeight);
//ui->listViewShowCmdArea->lower();
/*******视频区位置和大小设置********/
double VideoAreaHeight = GDDCPageHeight-cmdAreaHeight; //视频区高度
double VideoAreaWidth = GDDCPageWidth-stateAreaWidth; //视频区宽度
//高度值相对比较大
if(VideoAreaHeight*16>VideoAreaWidth*9)
{
double setVideoAreaWidth = VideoAreaWidth;//等于吊舱页面宽度
double setVideoAreaWidth = VideoAreaWidth;//等于吊舱页面宽度-状态区高度
double setVideoAreaHeight = VideoAreaWidth*9/16;
ui->WgtffmpegVideo->setGeometry(0,0.5*(GDDCPageHeight-cmdAreaHeight-setVideoAreaHeight),(int)setVideoAreaWidth,(int)setVideoAreaHeight);
ui->WgtffmpegVideo->setGeometry(0,0.5*(VideoAreaHeight-setVideoAreaHeight),(int)setVideoAreaWidth,(int)setVideoAreaHeight);
}
//宽度值相对比较大
else
{
double setVideoAreaHeight = VideoAreaHeight;//等于 吊舱页面高度-控制指令高度
double setVideoAreaHeight = VideoAreaHeight;//等于吊舱页面高度-控制区高度
double setVideoAreaWidth = VideoAreaHeight*16/9;
ui->WgtffmpegVideo->setGeometry(0.5*(GDDCPageWidth-setVideoAreaWidth),0,(int)setVideoAreaWidth,(int)setVideoAreaHeight);
ui->WgtffmpegVideo->setGeometry(0.5*(VideoAreaWidth-setVideoAreaWidth),0,(int)setVideoAreaWidth,(int)setVideoAreaHeight);
}
/**************设置按钮****************/
ui->pushButtonSet->setGeometry(GDDCPageWidth-40,10,40,40);
ui->pushButtonSet->setGeometry(GDDCPageWidth-stateAreaWidth-45,0,40,40);
/**********控制指令区显示隐藏按钮********/
ui->pushButShowCmdArea->setGeometry(GDDCPageWidth*0.5,GDDCPageHeight-cmdAreaHeight-20,20,20);
ui->pushButShowCmdArea->setGeometry((GDDCPageWidth-200)*0.5,GDDCPageHeight-cmdAreaHeight-20,40,20);
ui->pushButShowCmdArea->raise();
}
//定时器处理
@ -1663,6 +1753,7 @@ void GDDCdlg::stopConnectUDPCtrl()
if(connectFlag[3])
{
udpSocket->abort();//关闭套接字,并丢缓冲区中的所有待处理数据
delete udpSocket;
connectFlag[3] = false;
}
}
@ -1687,6 +1778,7 @@ void GDDCdlg::stopConnectTCPCtrl()
void GDDCdlg::on_pushButtonSet_clicked()
{
m_DlgGDDCSet->show();
m_DlgGDDCSet->activateWindow();
}
//udp数据接收
@ -1699,15 +1791,534 @@ void GDDCdlg::UDPMessageReceive()
udpSocket->readDatagram(data.data(),data.size(),&addr,&port);
//const char* chardata= data.constData();
qDebug()<<data.data();
if(checkdata(data,data.size(),1))
{
QString str;
double dou;
float flo;
//载荷类型
switch(data.at(2))
{
case '\x01':
str = "白光";
break;
case '\x02':
str = "红外";
break;
case '\x03':
str = "双光";
break;
case '\x04':
str = "三光";
break;
case '\x05':
str = "四光";
break;
default:
str = "未知";
break;
}
m_tableModel->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 GDDCdlg::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;
}
//控制页面隐藏与显示
void GDDCdlg::on_pushButShowCmdArea_clicked()
{
if(isCmdAreaShow)
{
ui->tabWidget->setVisible(false);
ui->tableViewShowIState->setVisible(false);
isCmdAreaShow = false;
resizeUI();
ui->pushButShowCmdArea->setIcon(QIcon(":/res/up.png"));
@ -1716,6 +2327,7 @@ void GDDCdlg::on_pushButShowCmdArea_clicked()
else
{
ui->tabWidget->setVisible(true);
ui->tableViewShowIState->setVisible(true);
isCmdAreaShow = true;
resizeUI();
ui->pushButShowCmdArea->setIcon(QIcon(":/res/down.png"));

@ -11,11 +11,12 @@
#include <fstream>
#include <iostream>
#include <string>
#include "cffmpeg_decode.h"
#include "Src/GDDC/gddcSet.h"
#include <vector>
#include <QHeaderView>
#include <QStandardItemModel>
#define cmdLength 44
namespace Ui {
@ -62,6 +63,7 @@ public:
void mousePressEvent(QMouseEvent *event); //事件过滤器
void mouseMoveEvent(QMouseEvent *event); //事件过滤器
QStandardItemModel *m_tableModel;
void startConnectURL1();
void stopConnectURL1();
void startConnectURL2();
@ -72,6 +74,12 @@ public:
void stopConnectUDPCtrl();
void startConnectTCPCtrl();
void stopConnectTCPCtrl();
/*数据校验
*
*
* 12
*/
bool checkdata(QByteArray,int,int);
public:
bool pointSelectionTracking = false; //选点跟踪
bool param_pushButton_3_9;
@ -87,6 +95,30 @@ public slots:
void startConnect(int); //开始连接
void stopConnect(int); //停止连接
void UDPMessageReceive(); //udp数据接收
public:
typedef union
{
float float_value;
UINT8 uint8[4];
}packet_uint32_to_float;
float m_uint32_to_float(UINT8 value4, UINT8 value3, UINT8 value2, UINT8 value1)
{
packet_uint32_to_float packet;
UINT8 buf[4]; memset(buf,0x00,sizeof(buf));
buf[0] = (UINT8)((value1) & 0xFF);
buf[1] = (UINT8)((value2) & 0xFF);
buf[2] = (UINT8)((value3) & 0xFF);
buf[3] = (UINT8)((value4) & 0xFF);
UINT32 uint32 = ((buf[0]<<24) & 0XFFFFFFFF) + ((buf[1]<<16) & 0XFFFFFF) + ((buf[2]<<8) & 0XFFFF) + buf[3];
for(UINT8 i = 0; i < 4; i++)
{
packet.uint8[i] = (UINT8)(uint32>>(i*8));
}
//print("modbus_uint32_to_float uint32=%d, value1=%d; value2=%d; float_value = %f;",uint32,value1,value2,packet.float_value);
return packet.float_value;
}
private slots:
/*系统控制*/
void on_pushButton_11_pressed();

@ -145,7 +145,7 @@
<rect>
<x>10</x>
<y>350</y>
<width>1201</width>
<width>1071</width>
<height>250</height>
</rect>
</property>
@ -189,7 +189,7 @@
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
<number>0</number>
<number>2</number>
</property>
<property name="elideMode">
<enum>Qt::ElideNone</enum>
@ -703,7 +703,7 @@
<property name="geometry">
<rect>
<x>510</x>
<y>0</y>
<y>10</y>
<width>121</width>
<height>191</height>
</rect>
@ -929,7 +929,7 @@
<property name="geometry">
<rect>
<x>640</x>
<y>0</y>
<y>10</y>
<width>121</width>
<height>191</height>
</rect>
@ -1027,7 +1027,7 @@
<property name="geometry">
<rect>
<x>920</x>
<y>0</y>
<y>10</y>
<width>120</width>
<height>211</height>
</rect>
@ -1069,7 +1069,7 @@
<property name="geometry">
<rect>
<x>780</x>
<y>0</y>
<y>10</y>
<width>120</width>
<height>211</height>
</rect>
@ -1167,7 +1167,7 @@
<property name="geometry">
<rect>
<x>380</x>
<y>-1</y>
<y>10</y>
<width>120</width>
<height>191</height>
</rect>
@ -2269,6 +2269,16 @@ font: 12pt &quot;Microsoft YaHei UI&quot;;</string>
</widget>
</widget>
</widget>
<widget class="QTableView" name="tableViewShowIState">
<property name="geometry">
<rect>
<x>1060</x>
<y>120</y>
<width>256</width>
<height>192</height>
</rect>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>

@ -1,7 +1,7 @@
#ifndef STRUCTDEFINEMYSLEF_H
#define STRUCTDEFINEMYSLEF_H
#endif // STRUCTDEFINEMYSLEF_H
#include <QString>
#include <QHostAddress>
@ -47,3 +47,6 @@ public:
quint16 getRemotePort(){return remotePort;}
QHostAddress getRemoteAddr(){return remoteAddr;}
};
#endif // STRUCTDEFINEMYSLEF_H

@ -0,0 +1,595 @@
#ifndef __FRAME_RECIEVE_H
#define __FRAME_RECIEVE_H
#include "framelib/basetype.h"
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <math.h>
#define ROUND_INT8(v) ((INT8)((floor)(v+0.5)))
#define ROUND_UINT8(v) ((UINT8)((floor)(v+0.5)))
#define ROUND_INT16(v) ((INT16)((floor)(v+0.5)))
#define ROUND_UINT16(v) ((UINT16)((floor)(v+0.5)))
#define ROUND_INT32(v) ((INT32)((floor)(v+0.5)))
#define ROUND_UINT32(v) ((UINT32)((floor)(v+0.5)))
const BYTE FLAG_PLAT = 0xE0;
const BYTE PLAT_Manual = 0x00 << 5;
const BYTE PLAT_Auto = 0x01 << 5;
const BYTE PLAT_Locking = 0x02 << 5;
const BYTE PLAT_Leading = 0x03 << 5;
const BYTE PLAT_Scaning = 0x04 << 5;
const BYTE PLAT_Reseting = 0x05 << 5;
const BYTE PLAT_Init = 0x06 << 5;
const BYTE FLAG_TRACKER = 0x1C;
const BYTE TRACKER_Normal = 0x00 << 2;
const BYTE TRACKER_Error = 0x01 << 2;
const BYTE TRACKER_Lost = 0x02 << 2;
const BYTE TRACKER_Corr = 0x03 << 2;
const BYTE TRACKER_GBlack = 0x04 << 2;
const BYTE TRACKER_GWhite = 0x05 << 2;
const BYTE TRACKER_ShowFreeze = 0x06 << 2;
const BYTE TRACKER_Freeze = 0x07 << 2;
const BYTE FLAG_LIFTER = 0x03;
const BYTE LIFTER_Top = 0x00;
const BYTE LIFTER_Bottom = 0x01;
const BYTE LIFTER_Uping = 0x02;
const BYTE LIFTER_Downing = 0x03;
const BYTE FLAG_EO = 0xC0;
const BYTE EO_Working = 0x00 << 6;
const BYTE EO_Error = 0x01 << 6;
const BYTE EO_Heating = 0x02 << 6;
const BYTE EO_Heated = 0x03 << 6;
const BYTE FLAG_PAYLOAD = 0x20;
const BYTE PAYLOAD_EO = 0x00 << 5;
const BYTE PAYLOAD_HW = 0x01 << 5;
const BYTE FLAG_HW = 0x18;
const BYTE HW_Working = 0x00 << 3;
const BYTE HW_Error = 0x01 << 3;
const BYTE HW_Manual = 0x02 << 3;
const BYTE HW_Auto = 0x03 << 3;
const BYTE FLAG_LASER = 0x07;
const BYTE LASER_Normal = 0x00;
const BYTE LASER_Error = 0x01;
const BYTE LASER_Close = 0x02;
const BYTE LASER_Standby = 0x03;
const BYTE LASER_On = 0x04;
const BYTE LASER_Off = 0x05;
const double AngRatiode = 360.0 / 65535.0;
const double AngRatioen = 65535.0 / 360.0;
typedef enum { ftFJu, //按飞机平台上行协议校验
ftFJd, //按飞机平台下行协议校验
ftEOu, //按稳定平台上行协议校验
ftEOd, //按稳定平台下行协议校验
ftCJu, //按测距测角上行协议校验
ftCJd, //按测距测角下行协议校验
ftQBu, //按情报上行协议校验
ftQBd, //按情报下行协议校验
ftCKd, //按测控下行协议校验
ftSFu, ftSFd, ftFKu, ftFKd, ftEOGCSu, ftEOSBu, ftTXd, ftTXd_8B, ftTXd_8B_SM, ftTXd_8B_SAR, //图像复接数据协议
ftEOU_8B,
ftMIMUu, //MIMU上行协议数据协议
ftMIMUd, //MIMU下行协议数据协议
ftGPSu, //GPS上行协议数据协议
ftGPSd, //GPS下行协议数据协议
ftBDu, //北斗上行协议数据协议
ftBDd, //北斗下行协议数据协议
ftPOWERu, //飞控计算机发送到电源管理器的数据帧
ftPOWERd, //电源管理器发送到飞控计算机的数据帧
ftOILu, //飞控计算机发送到油量传感器的数据帧
ftOILd, //油量传感器发送到飞控计算机的数据帧
ftMAGu, //飞控计算机发送到电子罗盘的数据帧
ftMAGd, //电子罗盘发送到飞控计算机的数据帧
ftGKu, //飞控计算机发送到高度/空速传感器的数据帧
ftGKd, //高度/空速传感器发送到飞控计算机的数据帧
ftNone //自定义校验
} TFrameType;
inline double RoundMax(double v, double vmax)
{
return fmod(v, vmax);
// while (v < 0)
// v += vmax;
// while (v > vmax)
// v -= vmax;
// return v;
}
inline void ChangeFileNameExt(char *name, const char *ext)
{
char *p = strrchr(name, '.');
if(p) *(p+1) = 0;
strcat(name, ext);
}
//循环缓冲区类
class CBufferLoop {
private:
int FSize; //缓冲区大小
int FStart; //有效数据头
int FEnd; //有效数据尾
int FLength; //有效数据长度
BYTE* FBuffer; //缓冲区地址
protected:
INT16 Append(const unsigned char* Src, const UINT32 alen)
{
INT16 len = (alen > (UINT32) FSize) ? FSize : (INT16) alen;
assert(len > 0);
//缓存剩余空间不够Length
if ((len + FLength) >= FSize)
len = FSize - FLength;
if ((len + FEnd) >= FSize) {
//缓存内数据块后部空间不够Length将数据块移到缓存首地址
memcpy(FBuffer, FBuffer + FStart, FLength);
FStart = 0;
FEnd = FLength;
}
memcpy(FBuffer + FEnd, Src, len);
FEnd += len;
FLength += len;
return len;
}
void Drop(const UINT16 len)
{
assert(len > 0);
if (len > FLength) {
FStart = 0;
FEnd = 0;
FLength = 0;
} else {
FStart += len;
FLength -= len;
}
}
int Size(){return FSize;}
int Length(){return FLength;}
public:
CBufferLoop() : FSize(1000), FStart(0), FEnd(0), FLength(0), FBuffer(0)
{
FBuffer = new unsigned char[FSize];
memset(FBuffer, 0, FSize);
};
CBufferLoop(const CBufferLoop& abl)
: FSize(abl.FSize), FStart(abl.FStart), FEnd(abl.FEnd),
FLength(abl.FLength), FBuffer(0)
{
FBuffer = new unsigned char[FSize];
memcpy(FBuffer, abl.FBuffer, FSize);
}
virtual ~CBufferLoop(){
delete[] FBuffer;
FBuffer = 0;
}
CBufferLoop& operator=(const CBufferLoop& abl)
{
if (this == &abl)
return *this; // 见条款17
if (FBuffer)
delete[] FBuffer;
FSize = abl.FSize;
FStart = abl.FStart;
FEnd = abl.FEnd;
FLength = abl.FLength;
FBuffer = new unsigned char[FSize];
memcpy(FBuffer, abl.FBuffer, FSize);
return *this;
}
BYTE* const Addr() {return FBuffer + FStart;}
void Reset()
{
memset(FBuffer, 0, FSize);
FStart = 0;
FEnd = 0;
FLength = 0;
}
};
class CSimpleCriticalSection {
private:
CRITICAL_SECTION FSection;
public:
CSimpleCriticalSection(){InitializeCriticalSection(&FSection);}
virtual ~CSimpleCriticalSection(){DeleteCriticalSection(&FSection);}
void Enter(){EnterCriticalSection(&FSection);}
void Leave(){LeaveCriticalSection(&FSection);}
};
//解析事件回调函数类型
class CFrameAbstract;
typedef void (CALLBACK *FLDropBYTECALLBACK)(CFrameAbstract* frm, UINT16 Count);
typedef void (CALLBACK *FLDropFrameCALLBACK)(CFrameAbstract* frm, UINT16 Count);
typedef void (CALLBACK *FLNotCheckCALLBACK)(CFrameAbstract* frm);
typedef void (CALLBACK *FLCheckCALLBACK)(CFrameAbstract* frm);
//数据帧编帧、解析抽象类
class CFrameAbstract : public CBufferLoop {
public:
CFrameAbstract() :
FrameLength(32),
HeadLength(2),
CheckLength(1),
CheckPos(31),
FrameType(ftNone),
bphrasing(FALSE),
bFileOpen(FALSE),
nFlushCount(0),
cs(new CSimpleCriticalSection()),
hFileOrg(NULL),
hFileCheck(NULL),
hFileNotCheck(NULL),
funcDropBYTE(NULL),
funcDropFrame(NULL),
funcNotCheck(NULL),
funcCheck(NULL),
CountBYTEAll(0),
CountBYTEDrop(0),
CountFrameAll(0),
CountFrameCheck(0),
CountFrameNotCheck(0),
CountFrameDrop(0),
funcDropBYTEParam(NULL),
funcDropFrameParam(NULL),
funcNotCheckParam(NULL),
funcCheckParam(NULL)
{};
virtual ~CFrameAbstract(){
funcDropBYTE = NULL;
funcDropFrame = NULL;
funcNotCheck = NULL;
funcCheck = NULL;
funcDropBYTEParam = NULL;
funcDropFrameParam = NULL;
funcNotCheckParam = NULL;
funcCheckParam = NULL;
while (TRUE == bphrasing){
Sleep(100);
}
if(bFileOpen){
fclose(hFileOrg);
fclose(hFileCheck);
fclose(hFileNotCheck);
bFileOpen = FALSE;
}
delete cs;
}
protected:
UINT16 FrameLength; //帧长
UINT16 HeadLength; //帧头长度
UINT16 CheckLength; //帧内保存校验字节的个数
UINT16 CheckPos; //帧内保存校验字节的位置
TFrameType FrameType; //帧格式类型
public:
char Name[20];
BYTE Head[12];
TFrameType GetFrameType(){return FrameType;}
UINT16 GetFrameLength(){return FrameLength;}
UINT16 GetHeadLength(){return HeadLength;}
private:
BOOL bphrasing;
BOOL bFileOpen;
INT32 nFlushCount;
CSimpleCriticalSection* cs;
char strModuleName[1024];
char strAppPath[1024];
public:
char strDataPath[1024];
protected:
char strDataName[1024];
FILE * hFileOrg;
FILE * hFileCheck;
FILE * hFileNotCheck;
virtual BOOL FullFrame()
{
int HeaderPos, HeaderPos2;
HeaderPos = FindHead(0, Length() - HeadLength);
if (0 == HeaderPos){
//帧头在最前面
if (OnCheck()){
DoCheck();
}
else //校验没通过
{
HeaderPos2 = FindHead(HeadLength, Length() - HeadLength);
if ((HeaderPos2 >= 0) && (HeaderPos2 < FrameLength))
{
DoDropFrame((UINT16) HeaderPos2);
}
else if (HeaderPos2 < 0)
{
if (Length() <= FrameLength + (HeadLength - 1))
{
if (HeadLength == 1)
DoNotCheck();
else
{
BYTE* p = Addr();
if (p[FrameLength - (HeadLength - 1)] != Head[0])
DoNotCheck();
else
return TRUE;
}
} else
DoNotCheck();
}
else
{
DoNotCheck();
}
}
} else if (HeaderPos < 0) {
//没找到帧头
DoDropBYTE((UINT16) (FrameLength - HeadLength));
} else {
//丢弃帧头前的数据
DoDropBYTE((UINT16) HeaderPos);
}
return FALSE;
}
void DoCheck()
{
assert(FrameLength > 0);
++CountFrameAll;
++CountFrameCheck;
OnDataCheck();
Drop(FrameLength);
}
void DoNotCheck()
{
assert(FrameLength > 0);
++CountFrameAll;
CountBYTEDrop += FrameLength;
++CountFrameNotCheck;
OnDataNotCheck();
Drop(FrameLength);
}
void DoDropFrame(const UINT16 Count)
{
assert(Count > 0);
++CountFrameAll;
CountBYTEDrop += Count;
++CountFrameDrop;
OnDataDropFrame(Count);
Drop(Count);
}
void DoDropBYTE(const UINT16 Count)
{
assert(Count > 0);
CountBYTEDrop += Count;
OnDataDropBYTE(Count);
Drop(Count);
}
int FindHead(int Start, const int Length)
{
assert((Start >= 0) && (Length > 0));
BYTE* p = Addr() + Start;
while (Start < Length) {
if (memcmp(p, Head, HeadLength) == 0)
return Start;
++p;
++Start;
}
return -1;
}
virtual BOOL OnCheck() //帧校验函数
{
BYTE* p = Addr();
struCHECK ck=CheckCRC(p);
if (1 == CheckLength)
{
return (ck.C0== p[CheckPos]) ? TRUE : FALSE;
}
else if (2 == CheckLength)
{
return ((p[CheckPos]==ck.C0)&&(p[CheckPos+1]==ck.C1));
}
else
{
return false;
}
}
protected:
FLDropBYTECALLBACK funcDropBYTE;
FLDropFrameCALLBACK funcDropFrame;
FLNotCheckCALLBACK funcNotCheck;
FLCheckCALLBACK funcCheck;
INT32 CountBYTEAll; //接收到的全部字节数
INT32 CountBYTEDrop; //丢弃的字节数
INT32 CountFrameAll; //全部帧计数
INT32 CountFrameCheck; //有效帧计数
INT32 CountFrameNotCheck; //校验错的帧计数
INT32 CountFrameDrop; //短帧计数
virtual void OnDataDropBYTE(const UINT16 Count) //无效字节段事件函数,需用户自行编制处理函数
{
if (funcDropBYTE != NULL) funcDropBYTE(this, Count);
}
virtual void OnDataDropFrame(const UINT16 Count) //短帧事件函数,需用户自行编制处理函数
{
if (funcDropFrame != NULL) funcDropFrame(this, Count);
}
virtual void OnDataNotCheck() //帧校验错事件函数,需用户自行编制处理函数
{
//Decode();
if (funcNotCheck != NULL) funcNotCheck(this);
//Distribute();
//Show();
if(bFileOpen) fwrite(Addr(), FrameLength, 1, hFileNotCheck);
}
virtual void OnDataCheck() //有效帧事件函数,需用户自行编制处理函数
{
Decode();
if (funcCheck != NULL) funcCheck(this);
Distribute();
Show();
if(bFileOpen) fwrite(Addr(), FrameLength, 1, hFileCheck);
}
public:
UINT32 funcDropBYTEParam;
UINT32 funcDropFrameParam;
UINT32 funcNotCheckParam;
UINT32 funcCheckParam;
void SetDropBYTECallback(FLDropBYTECALLBACK fun, UINT32 Param = 0){ funcDropBYTE = fun; funcDropBYTEParam = Param;}
void SetDropFrameCallback(FLDropFrameCALLBACK fun, UINT32 Param = 0){ funcDropFrame = fun; funcDropFrameParam = Param;}
void SetNotCheckCallback(FLNotCheckCALLBACK fun, UINT32 Param = 0){ funcNotCheck = fun; funcNotCheckParam = Param;}
void SetCheckCallback(FLCheckCALLBACK fun, UINT32 Param = 0){ funcCheck = fun; funcCheckParam = Param;}
void SetSaveStatus(BOOL IsSave, const char *name = NULL)
{
if(IsSave){
GetModuleFileName(GetModuleHandle(NULL), strModuleName, 1024);
char *p = strrchr(strModuleName, '\\');
if(p) strncpy(strAppPath, strModuleName, p - strModuleName);
else strcpy(strAppPath, strModuleName);
time_t ltime;
struct tm *t;
time( &ltime );
t = localtime( &ltime );
sprintf(strDataPath, "%s\\RecordOrg-%04d%02d%02d", strAppPath, t->tm_year, t->tm_mon, t->tm_mday);
char temp[1024];
sprintf(temp, "%04d%02d%02d %02d%02d%02d", t->tm_year + 1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
CreateDirectory((LPCSTR)strDataPath, NULL);
if(name == NULL){
sprintf(strDataName, "%s\\%s-%s.dat", strDataPath, temp, Name);
}
else{
sprintf(strDataName, "%s\\%s-%s.dat", strDataPath, temp, name);
}
if((hFileOrg = fopen(strDataName, "wb")) != NULL){
strcpy(temp, strDataName);
ChangeFileNameExt(temp,"chk");
if((hFileCheck = fopen(temp, "wb")) != NULL){
strcpy(temp, strDataName);
ChangeFileNameExt(temp,"err");
if((hFileNotCheck = fopen(temp, "wb")) != NULL){
bFileOpen = TRUE;
}
else{
fclose(hFileCheck);
fclose(hFileOrg);
}
bFileOpen = TRUE;
}
else{
fclose(hFileOrg);
}
}
}
else{
if(bFileOpen){
fclose(hFileOrg);
fclose(hFileCheck);
fclose(hFileNotCheck);
bFileOpen = FALSE;
}
}
}
void ResetCount()
{
//用于计数清零
CountBYTEAll = 0L;
CountBYTEDrop = 0L;
CountFrameAll = 0L;
CountFrameCheck = 0L;
CountFrameNotCheck = 0L;
CountFrameDrop = 0L;
}
void Phrase(const BYTE* Src, const UINT32 Count)
{
cs->Enter();
int ReadCount;
UINT32 LeftCount = Count;
const BYTE* psrc = Src;
bphrasing = TRUE;
while (LeftCount > 0)
{
ReadCount = Append(psrc, LeftCount);
psrc += ReadCount;
LeftCount -= ReadCount;
CountBYTEAll += ReadCount;
while (Length() >= FrameLength)
if (FullFrame())
break;
}
try{
if(bFileOpen)
{
fwrite(Src, Count, 1, hFileOrg);
if((CountBYTEAll - nFlushCount) > 40960)
{
fflush(hFileOrg);
fflush(hFileCheck);
fflush(hFileNotCheck);
nFlushCount = CountBYTEAll;
}
}
}
catch (...)
{
cs->Leave();
bphrasing = FALSE;
}
cs->Leave();
bphrasing = FALSE;
}
INT32 GetCountBYTEAll(){return CountBYTEAll;}
INT32 GetCountBYTEDrop(){return CountBYTEDrop;}
INT32 GetCountFrameAll(){return CountFrameAll;}
INT32 GetCountFrameCheck(){return CountFrameCheck;}
INT32 GetCountFrameNotCheck(){return CountFrameNotCheck;}
INT32 GetCountFrameDrop(){return CountFrameDrop;}
//output
protected:
virtual void FrameCrc(BYTE* p)
{
struCHECK ck=CheckCRC(p);
if (CheckLength==1)
{
p[CheckPos]=ck.C0;
}
if (CheckLength==2)
{
p[CheckPos] = ck.C0;
p[CheckPos+1]=ck.C1;
}
}
public:
virtual BYTE* SendPrepare()
{
BYTE* po;
po = Addr();
Encode();
FrameCrc(po);
return(po);
}
virtual struCHECK CheckCRC(BYTE* const p) = 0;
protected:
virtual void Decode(){}
virtual void Distribute(){}
virtual void Encode(){}
public:
virtual void Show(){}
};
#endif // !defined(AFX_FRAMERECIEVE_H__79D92644_4FC6_49FB_A28B_59EF7305C25A__INCLUDED_)

@ -0,0 +1,364 @@
#ifndef _BASE_TYPE_H_
#define _BASE_TYPE_H_
#define __WIN_32_VC__
//#define __DOS_16_BC__
//#define __WIN_32_BCB__
#ifdef __WIN_32_VC__
// #include <afxwin.h>
#include <windows.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#endif
#ifdef __WIN_32_BCB__
#include <vcl.h>
#endif
#ifdef __WIN_32_BCB__
typedef unsigned __int8 BYTE;
typedef unsigned __int8 UINT8;
typedef unsigned __int16 UINT16;
typedef unsigned __int32 UINT32;
typedef __int8 INT8;
typedef __int16 INT16;
typedef __int32 INT32;
#endif
#ifdef __DOS_16_BC__
typedef unsigned char BYTE;
typedef unsigned char UINT8;
typedef unsigned int UINT16;
typedef unsigned long UINT32;
typedef char INT8;
typedef int INT16;
typedef long INT32;
#endif
#ifdef __DJGPP__
typedef unsigned char BYTE;
typedef unsigned char UINT8;
typedef unsigned int UINT16;
typedef unsigned long UINT32;
typedef char INT8;
typedef int INT16;
typedef long INT32;
#endif
#ifdef __WIN_32_VC__
typedef unsigned char BYTE;
typedef unsigned char UINT8;
typedef unsigned __int16 UINT16;
typedef unsigned int UINT32;
//typedef char INT8;
typedef __int16 INT16;
typedef int INT32;
#endif
#ifndef __WIN_32_BCB__
#ifdef __BORLANDC__
typedef unsigned char BOOL;
const BOOL FALSE = 0;
const BOOL TRUE = 1;
#endif
#endif
//#define SIGN(x) (((x)<0)?-1:1)
//#define ABS(x) (((x)<0)?-(x):(x))
const double PI = 3.141592653589793238462643383279502884197169399;
const double PI2 = PI * 2;
const double PI_2 = PI * 0.5;
const double PI_3 = PI / 3;
const double PI_4 = PI * 0.25;
const double DEG2RAD = 0.017453292519943295769236907684886127134428718885417;
const double RAD2DEG = 57.295779513082322864647721871733665466308593750000;
template< class T> inline const int SIGN(const T& x)
{
return x < 0 ? -1 : 1;
}
template< class T> inline const T ABS(const T& x)
{
return x < 0 ? -x : x;
}
typedef struct {
double lon;
double lat;
double height;
double roll;
double pitch;
double yaw;
double eoaz;
double eopitch;
double laser;
double focus;
double vg;
unsigned char GPS_STATUS;
short biasx;
short biasy;
bool ccd;
float utc;
}ESD_DATA;
struct struCHECK
{
struCHECK(){C0=C1=0;};
BYTE C0;
BYTE C1;
};
const UINT16 CRC8TAB[256] =
{
//0
0x0000, 0x0031, 0x0062, 0x0053, 0x00C4, 0x00F5, 0x00A6, 0x0097,
0x00B9, 0x0088, 0x00DB, 0x00EA, 0x007D, 0x004C, 0x001F, 0x002E,
//1
0x0043, 0x0072, 0x0021, 0x0010, 0x0087, 0x00B6, 0x00E5, 0x00D4,
0x00FA, 0x00CB, 0x0098, 0x00A9, 0x003E, 0x000F, 0x005C, 0x006D,
//2
0x0086, 0x00B7, 0x00E4, 0x00D5, 0x0042, 0x0073, 0x0020, 0x0011,
0x003F, 0x000E, 0x005D, 0x006C, 0x00FB, 0x00CA, 0x0099, 0x00A8,
//3
0x00C5, 0x00F4, 0x00A7, 0x0096, 0x0001, 0x0030, 0x0063, 0x0052,
0x007C, 0x004D, 0x001E, 0x002F, 0x00B8, 0x0089, 0x00DA, 0x00EB,
//4
0x003D, 0x000C, 0x005F, 0x006E, 0x00F9, 0x00C8, 0x009B, 0x00AA,
0x0084, 0x00B5, 0x00E6, 0x00D7, 0x0040, 0x0071, 0x0022, 0x0013,
//5
0x007E, 0x004F, 0x001C, 0x002D, 0x00BA, 0x008B, 0x00D8, 0x00E9,
0x00C7, 0x00F6, 0x00A5, 0x0094, 0x0003, 0x0032, 0x0061, 0x0050,
//6
0x00BB, 0x008A, 0x00D9, 0x00E8, 0x007F, 0x004E, 0x001D, 0x002C,
0x0002, 0x0033, 0x0060, 0x0051, 0x00C6, 0x00F7, 0x00A4, 0x0095,
//7
0x00F8, 0x00C9, 0x009A, 0x00AB, 0x003C, 0x000D, 0x005E, 0x006F,
0x0041, 0x0070, 0x0023, 0x0012, 0x0085, 0x00B4, 0x00E7, 0x00D6,
//8
0x007A, 0x004B, 0x0018, 0x0029, 0x00BE, 0x008F, 0x00DC, 0x00ED,
0x00C3, 0x00F2, 0x00A1, 0x0090, 0x0007, 0x0036, 0x0065, 0x0054,
//9
0x0039, 0x0008, 0x005B, 0x006A, 0x00FD, 0x00CC, 0x009F, 0x00AE,
0x0080, 0x00B1, 0x00E2, 0x00D3, 0x0044, 0x0075, 0x0026, 0x0017,
//A
0x00FC, 0x00CD, 0x009E, 0x00AF, 0x0038, 0x0009, 0x005A, 0x006B,
0x0045, 0x0074, 0x0027, 0x0016, 0x0081, 0x00B0, 0x00E3, 0x00D2,
//B
0x00BF, 0x008E, 0x00DD, 0x00EC, 0x007B, 0x004A, 0x0019, 0x0028,
0x0006, 0x0037, 0x0064, 0x0055, 0x00C2, 0x00F3, 0x00A0, 0x0091,
//C
0x0047, 0x0076, 0x0025, 0x0014, 0x0083, 0x00B2, 0x00E1, 0x00D0,
0x00FE, 0x00CF, 0x009C, 0x00AD, 0x003A, 0x000B, 0x0058, 0x0069,
//D
0x0004, 0x0035, 0x0066, 0x0057, 0x00C0, 0x00F1, 0x00A2, 0x0093,
0x00BD, 0x008C, 0x00DF, 0x00FE, 0x0079, 0x0048, 0x001B, 0x002A,
//E
0x00C1, 0x00F0, 0x00A3, 0x0092, 0x0005, 0x0034, 0x0067, 0x0056,
0x0078, 0x0049, 0x001A, 0x002B, 0x00BC, 0x008D, 0x00DE, 0x00EF,
//F
0x0082, 0x00B3, 0x00E0, 0x00D1, 0x0046, 0x0077, 0x0024, 0x0015,
0x003B, 0x000A, 0x0059, 0x0068, 0x00FF, 0x00CE, 0x009D, 0x00AC
};
const UINT16 Crc_Table[256] = // X16+X12+X5+1 1021余式表 CCITT
{
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
};
const unsigned char CRCLIST[512] = {
0x0,0x0,0x89,0x11,0x12,0x23,0x9b,0x32,0x24,0x46,0xad,0x57,0x36,0x65,0xbf,0x74,
0x48,0x8c,0xc1,0x9d,0x5a,0xaf,0xd3,0xbe,0x6c,0xca,0xe5,0xdb,0x7e,0xe9,0xf7,0xf8,
0x81,0x10,0x8,0x1,0x93,0x33,0x1a,0x22,0xa5,0x56,0x2c,0x47,0xb7,0x75,0x3e,0x64,
0xc9,0x9c,0x40,0x8d,0xdb,0xbf,0x52,0xae,0xed,0xda,0x64,0xcb,0xff,0xf9,0x76,0xe8,
0x2,0x21,0x8b,0x30,0x10,0x2,0x99,0x13,0x26,0x67,0xaf,0x76,0x34,0x44,0xbd,0x55,
0x4a,0xad,0xc3,0xbc,0x58,0x8e,0xd1,0x9f,0x6e,0xeb,0xe7,0xfa,0x7c,0xc8,0xf5,0xd9,
0x83,0x31,0xa,0x20,0x91,0x12,0x18,0x3,0xa7,0x77,0x2e,0x66,0xb5,0x54,0x3c,0x45,
0xcb,0xbd,0x42,0xac,0xd9,0x9e,0x50,0x8f,0xef,0xfb,0x66,0xea,0xfd,0xd8,0x74,0xc9,
0x4,0x42,0x8d,0x53,0x16,0x61,0x9f,0x70,0x20,0x4,0xa9,0x15,0x32,0x27,0xbb,0x36,
0x4c,0xce,0xc5,0xdf,0x5e,0xed,0xd7,0xfc,0x68,0x88,0xe1,0x99,0x7a,0xab,0xf3,0xba,
0x85,0x52,0xc,0x43,0x97,0x71,0x1e,0x60,0xa1,0x14,0x28,0x5,0xb3,0x37,0x3a,0x26,
0xcd,0xde,0x44,0xcf,0xdf,0xfd,0x56,0xec,0xe9,0x98,0x60,0x89,0xfb,0xbb,0x72,0xaa,
0x6,0x63,0x8f,0x72,0x14,0x40,0x9d,0x51,0x22,0x25,0xab,0x34,0x30,0x6,0xb9,0x17,
0x4e,0xef,0xc7,0xfe,0x5c,0xcc,0xd5,0xdd,0x6a,0xa9,0xe3,0xb8,0x78,0x8a,0xf1,0x9b,
0x87,0x73,0xe,0x62,0x95,0x50,0x1c,0x41,0xa3,0x35,0x2a,0x24,0xb1,0x16,0x38,0x7,
0xcf,0xff,0x46,0xee,0xdd,0xdc,0x54,0xcd,0xeb,0xb9,0x62,0xa8,0xf9,0x9a,0x70,0x8b,
0x8,0x84,0x81,0x95,0x1a,0xa7,0x93,0xb6,0x2c,0xc2,0xa5,0xd3,0x3e,0xe1,0xb7,0xf0,
0x40,0x8,0xc9,0x19,0x52,0x2b,0xdb,0x3a,0x64,0x4e,0xed,0x5f,0x76,0x6d,0xff,0x7c,
0x89,0x94,0x0,0x85,0x9b,0xb7,0x12,0xa6,0xad,0xd2,0x24,0xc3,0xbf,0xf1,0x36,0xe0,
0xc1,0x18,0x48,0x9,0xd3,0x3b,0x5a,0x2a,0xe5,0x5e,0x6c,0x4f,0xf7,0x7d,0x7e,0x6c,
0xa,0xa5,0x83,0xb4,0x18,0x86,0x91,0x97,0x2e,0xe3,0xa7,0xf2,0x3c,0xc0,0xb5,0xd1,
0x42,0x29,0xcb,0x38,0x50,0xa,0xd9,0x1b,0x66,0x6f,0xef,0x7e,0x74,0x4c,0xfd,0x5d,
0x8b,0xb5,0x2,0xa4,0x99,0x96,0x10,0x87,0xaf,0xf3,0x26,0xe2,0xbd,0xd0,0x34,0xc1,
0xc3,0x39,0x4a,0x28,0xd1,0x1a,0x58,0xb,0xe7,0x7f,0x6e,0x6e,0xf5,0x5c,0x7c,0x4d,
0xc,0xc6,0x85,0xd7,0x1e,0xe5,0x97,0xf4,0x28,0x80,0xa1,0x91,0x3a,0xa3,0xb3,0xb2,
0x44,0x4a,0xcd,0x5b,0x56,0x69,0xdf,0x78,0x60,0xc,0xe9,0x1d,0x72,0x2f,0xfb,0x3e,
0x8d,0xd6,0x4,0xc7,0x9f,0xf5,0x16,0xe4,0xa9,0x90,0x20,0x81,0xbb,0xb3,0x32,0xa2,
0xc5,0x5a,0x4c,0x4b,0xd7,0x79,0x5e,0x68,0xe1,0x1c,0x68,0xd,0xf3,0x3f,0x7a,0x2e,
0xe,0xe7,0x87,0xf6,0x1c,0xc4,0x95,0xd5,0x2a,0xa1,0xa3,0xb0,0x38,0x82,0xb1,0x93,
0x46,0x6b,0xcf,0x7a,0x54,0x48,0xdd,0x59,0x62,0x2d,0xeb,0x3c,0x70,0xe,0xf9,0x1f,
0x8f,0xf7,0x6,0xe6,0x9d,0xd4,0x14,0xc5,0xab,0xb1,0x22,0xa0,0xb9,0x92,0x30,0x83,
0xc7,0x7b,0x4e,0x6a,0xd5,0x58,0x5c,0x49,0xe3,0x3d,0x6a,0x2c,0xf1,0x1e,0x78,0xf
};
inline struCHECK getCRC8(UINT8* data, int len)
{
UINT16 crc = 0;
int i=0;
while (len-- > 0)
{
crc = CRC8TAB[crc ^ (data[i]&0x00FF)];
++i;
}
struCHECK ck;
ck.C1=(crc>>8);
ck.C0=(crc&0x00ff);
return ck;
}
inline struCHECK MakeCheckCRC(UINT8 * dataptr,INT16 len)
{
INT16 count = 0;
UINT8 C0 = 0,C1 = 0,Y0 = 0,Y1 = 0,Z0 = 0,Z1 = 0;
C0=C1=Y0=Y1=Z0=Z1=0;
while(count < len)
{
Y0=(CRCLIST[2*(*dataptr)]^C1) & 0x00FF;
Y1=(CRCLIST[2*(*dataptr)+1]) & 0x00FF;
Z0=CRCLIST[2*C0] & 0x00FF;
Z1=CRCLIST[2*C0+1] & 0x00FF;
C0=(Y0^Z0) & 0x00FF;
C1=(Y1^Z1) & 0x00FF;
++dataptr;
++count;
}
struCHECK ck;
ck.C1=C1;
ck.C0=C0;
return ck;
//return(C0+C1*256);/* return crc result */
}
inline struCHECK MakeCheckCRC1(UINT8 *ptr,UINT8 len)
{
UINT8 temp,i;
UINT16 crc = 0;
for(i = 0; i < len; ++i)
{
temp = (UINT8) (crc/256); // 以8位二进制数暂存CRC 的高8 位
crc <<= 8; // 左移 8 位
crc ^= Crc_Table[temp ^ *ptr]; // 高字节和当前数据XOR 再查表
++ptr;
}
struCHECK ck;
ck.C1=(crc>>8);
ck.C0=(crc&0xff);
return ck;
}
inline struCHECK MakeCheckCRC_256(UINT8 *ptr,UINT8 len)
{
struCHECK ck;
int count = 0;
unsigned char C0,C1,Y0,Y1,Z0,Z1;
C0=C1=Y0=Y1=Z0=Z1=0;
BYTE *pData = ptr;
while(count < len)
{
unsigned int idx = (unsigned int)(*pData);
idx = idx << 1;
Y0=(CRCLIST[idx]^C1) & 0x00FF;
Y1=(CRCLIST[idx+1]) & 0x00FF;
idx = ((unsigned int)C0) << 1;
Z0=CRCLIST[idx] & 0x00FF;
Z1=CRCLIST[idx+1] & 0x00FF;
C0=(Y0^Z0) & 0x00FF;
C1=(Y1^Z1) & 0x00FF;
++pData;
++count;
}
ck.C0=C0;
ck.C1=C1;
return ck;
}
inline UINT8 MakeCheckSum(UINT8 *ptr, UINT8 len)
{
UINT8 i;
UINT8 CK_A=0;
for (i=0; i < len; ++i )
{
CK_A = CK_A + ptr[i];
}
return CK_A;
}
inline struCHECK MakeCheckSum_RTCM(UINT8 *ptr, UINT8 len)//RTCM差分数据帧校验
{
UINT8 i;
UINT8 CK_A=0;
for (i=0; i < len; ++i )
{
CK_A = CK_A + ptr[i];
}
struCHECK ck;
ck.C1=0x00;
ck.C0=0x100 - CK_A;
return ck;
}
#endif//_BASE_TYPE_H_

@ -7,19 +7,18 @@ ffmpegvideoDlg::ffmpegvideoDlg(QWidget *parent)
{
ui->setupUi(this);
iniWindow();
ffmpeg = new Cffmpeg_decode;
// this->resize(640,480);
}
ffmpegvideoDlg::~ffmpegvideoDlg()
{
delete ui;
if(ffmpeg->isRunning()){
stop();
}
delete ffmpeg;
delete ui;
}
@ -46,7 +45,6 @@ void ffmpegvideoDlg::play()
if(!m_PlayStatus)
{
ffmpeg = new Cffmpeg_decode;
connect(ffmpeg,SIGNAL(sendQImage(QImage)),this,SLOT(receiveQImage(QImage)));
connect(ffmpeg,&Cffmpeg_decode::finished,ffmpeg,&Cffmpeg_decode::deleteLater);

@ -4,8 +4,6 @@
#include <QColor>
/*******************系统颜色***************************************/
extern QColor g_themeColor;
extern QString g_PushBtnStyle;

@ -49,8 +49,12 @@ MainWindow::MainWindow(QWidget *parent)
MainWindow::~MainWindow()
{
delete ui;
delete m_GDDCdlg;
delete m_HomePagedlg;
delete mWeb;
delete process;
delete ui;
}
void MainWindow::initWindow()
{
@ -61,7 +65,8 @@ void MainWindow::initWindow()
palette.setColor(QPalette::Window,g_themeColor);
this->setPalette(palette);
this->setWindowTitle("载荷应用软件");
this->resize(1280,970);
this->resize(1450,860);
//this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);//隐藏边框
m_GDDCdlg = new GDDCdlg(this);
m_HomePagedlg = new HomePageDlg(this);
@ -96,25 +101,25 @@ void MainWindow::initButton()
}
void MainWindow::initMenuBar()
{
QMenuBar *menuBar = new QMenuBar(this);
this->setMenuBar(menuBar);
QMenu *menu1 = new QMenu("菜单1",this);
QMenu *menu2 = new QMenu("菜单2",this);
QMenu *menu3 = new QMenu("菜单3",this);
QMenu *menu4 = new QMenu("菜单4",this);
QMenu *menu5 = new QMenu("菜单5",this);
QMenu *menu6 = new QMenu("菜单6",this);
QMenu *menu7 = new QMenu("菜单7",this);
menuBar->addMenu(menu1);
menuBar->addMenu(menu2);
menuBar->addMenu(menu3);
menuBar->addMenu(menu4);
menuBar->addMenu(menu5);
menuBar->addMenu(menu6);
menuBar->addMenu(menu7);
menuBar->setStyleSheet("QMenuBar{color:rgb(255,255,255);background:rgb(0,0,0);}");//设置颜色
// QMenuBar *menuBar = new QMenuBar(this);
// this->setMenuBar(menuBar);
// QMenu *menu1 = new QMenu("菜单1",this);
// QMenu *menu2 = new QMenu("菜单2",this);
// QMenu *menu3 = new QMenu("菜单3",this);
// QMenu *menu4 = new QMenu("菜单4",this);
// QMenu *menu5 = new QMenu("菜单5",this);
// QMenu *menu6 = new QMenu("菜单6",this);
// QMenu *menu7 = new QMenu("菜单7",this);
// menuBar->addMenu(menu1);
// menuBar->addMenu(menu2);
// menuBar->addMenu(menu3);
// menuBar->addMenu(menu4);
// menuBar->addMenu(menu5);
// menuBar->addMenu(menu6);
// menuBar->addMenu(menu7);
// menuBar->setStyleSheet("QMenuBar{color:rgb(255,255,255);background:rgb(0,0,0);}");//设置颜色
}
void MainWindow::initToolBar()
{
@ -169,7 +174,11 @@ void MainWindow::initToolBar()
/*"QAction:hover{background-color:white; color: green;}"*/
/*"QAction:pressed{background-color:rgb(100, 100, 100);}");*/
}
//初始化信号与槽
void MainWindow::initSignalSlot()
{
}
//主页
void MainWindow::on_pushButton_clicked()

@ -38,6 +38,7 @@ public:
void initButton();
void initMenuBar();
void initToolBar();
void initSignalSlot();
private slots:
void on_pushButton_clicked();
@ -60,7 +61,6 @@ public:
HomePageDlg *m_HomePagedlg;
//QWeb *m_qWeb;
QWebEngineView *mWeb;
private:
QProcess *process;
QString exeDirPathName = "";

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>884</width>
<height>462</height>
<width>954</width>
<height>563</height>
</rect>
</property>
<property name="sizePolicy">
@ -42,17 +42,30 @@
<enum>Qt::NoContextMenu</enum>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="1">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<spacer name="verticalSpacer">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>200</height>
<height>40</height>
</size>
</property>
</spacer>
@ -60,7 +73,7 @@
<item>
<widget class="QPushButton" name="pushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -94,7 +107,7 @@
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -128,7 +141,7 @@
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -162,7 +175,7 @@
<item>
<widget class="QPushButton" name="pushButton_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -196,7 +209,7 @@
<item>
<widget class="QPushButton" name="pushButton_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -230,7 +243,7 @@
<item>
<widget class="QPushButton" name="pushButton_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -264,7 +277,7 @@
<item>
<widget class="QPushButton" name="pushButton_7">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -298,7 +311,7 @@
<item>
<widget class="QPushButton" name="pushButton_8">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -330,34 +343,21 @@
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>200</height>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="3" column="2">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="2">
<item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<layout class="QVBoxLayout" name="SubPage"/>
@ -366,22 +366,6 @@
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar">
<property name="styleSheet">
<string notr="true">background:rgb(40,40,40);
color:rgb(20,200,200);</string>
</property>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>884</width>
<height>20</height>
</rect>
</property>
</widget>
<action name="toolbar2_action1">
<property name="icon">
<iconset>

@ -196,3 +196,52 @@ QFrame#frameGDDCPage
{
border:1px solid rgb(0,255,0);
}
/***************************QTableView***********************/
QTableView
{
color: rgb(255, 255, 255);
font-family:Consolas;
font-size:9pt;
border:none;
background-color: rgba(50, 50, 50, 50); /*rgba(150, 223, 155, 50)*/
selection-background-color: rgba(96, 96, 96, 0); /*选中区域的背景色,设置成透明96,96,96*/
}
QTableWidget::item {
font-size: 12pt;
color: #34495E;
height: 30px;
width: 80px;
}
/*设置单元格背景颜色*/
QTableWidget::item:selected
{
/*background-color:#CCFFE5;*/
}
/*设置表头背景颜色、角落颜色*/
QHeaderView::section,QTableCornerButton:section
{
padding:3px;
margin:0px;
color:rgb(0, 255, 0);
border:1px solid #242424;
border-left-width:0px;
border-right-width:1px;
border-top-width:0px;
border-bottom-width:1px;
background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 rgb(128, 128, 128),stop:1 #525252);
}
QHeaderView::section:checked
{
background-color: rgb(96, 96, 96 );
}
/*设置表格中的水平线和垂直线*/
QTableWidget::horizontalHeader
{
border-bottom: 1px solid #DADADA;
}
QTableWidget::verticalHeader
{
border-right: 1px solid #DADADA;
}

Loading…
Cancel
Save