升级到c++11,在存图文件夹不存在时自动创建,修复大量以byte为变量名的问题
This commit is contained in:
@@ -138,23 +138,23 @@ void Hd_CameraModule_3DKeyence::LJXA_ACQ_CloseDevice(int lDeviceId)
|
||||
}
|
||||
|
||||
|
||||
bool Hd_CameraModule_3DKeyence::decodeInitData(QByteArray byte,QVector<QByteArray> &vector_data)
|
||||
bool Hd_CameraModule_3DKeyence::decodeInitData(QByteArray byteArray,QVector<QByteArray> &vector_data)
|
||||
{
|
||||
while (!byte.isEmpty())
|
||||
while (!byteArray.isEmpty())
|
||||
{
|
||||
int type = 0;
|
||||
QByteArray m_type = byte.mid(0,4);
|
||||
QByteArray m_type = byteArray.mid(0,4);
|
||||
memcpy((void*)&type,(void*)m_type.data(), 4);
|
||||
byte.remove(0,4);
|
||||
byteArray.remove(0,4);
|
||||
|
||||
int len = 0;
|
||||
QByteArray m_len = byte.mid(0,4);
|
||||
QByteArray m_len = byteArray.mid(0,4);
|
||||
memcpy((void*)&len,(void*)m_len.data(), 4);
|
||||
byte.remove(0,4);
|
||||
byteArray.remove(0,4);
|
||||
|
||||
QByteArray mm_data = byte.mid(0,len);
|
||||
QByteArray mm_data = byteArray.mid(0,len);
|
||||
vector_data.append(mm_data);
|
||||
byte.remove(0,len);
|
||||
byteArray.remove(0,len);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
//int LJXA_ACQ_AcquireAsync(int lDeviceId, unsigned short* heightImage, unsigned short* luminanceImage, LJXA_ACQ_SETPARAM* setParam, LJXA_ACQ_GETPARAM* getParam);
|
||||
void LJXA_ACQ_CloseDevice(int lDeviceId);
|
||||
|
||||
bool decodeInitData(QByteArray byte,QVector<QByteArray> &vector_data);
|
||||
bool decodeInitData(QByteArray byteArray,QVector<QByteArray> &vector_data);
|
||||
bool InitHighSpeed();
|
||||
private:
|
||||
//int LJXA_ACQ_Acquire(int lDeviceId, unsigned short* heightImage, unsigned short* luminanceImage, LJXA_ACQ_SETPARAM* setParam, LJXA_ACQ_GETPARAM* getParam);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "Hd_CameraModule_HIK_hard.h"
|
||||
#include <QDebug>
|
||||
|
||||
using namespace std;
|
||||
#include <QTextCodec>
|
||||
QByteArray mv_Status = "connected";//0106 新增相机断联报警
|
||||
long long index = 0; //相机序号
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "base.h"
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
#pragma execution_character_set("utf-8")
|
||||
|
||||
class Hd_CameraModule_HIK_hard :public Base
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "Hd_CameraModule_HIK_hard_GenTL.h"
|
||||
#include <QDebug>
|
||||
|
||||
using namespace std;
|
||||
#include <QTextCodec>
|
||||
QByteArray mv_Status = "connected";//0106 新增相机断联报警
|
||||
long long index = 0; //相机序号
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "base.h"
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
#pragma execution_character_set("utf-8")
|
||||
|
||||
class Hd_CameraModule_HIK_hard_GenTL :public Base
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "Hd_CameraModule_HIK_soft.h"
|
||||
|
||||
using namespace std;
|
||||
#include <QThread>
|
||||
#include <QQueue>
|
||||
#include <QMutex>
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
#include "base.h"
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
#pragma execution_character_set("utf-8")
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "Hd_CameraModule_readImage.h"
|
||||
|
||||
using namespace std;
|
||||
#include <QTextCodec>
|
||||
//data == "rest_newProductIn"时要结束run;机台报警,取图超时,复位后重新拍的情况。
|
||||
bool ifBreak = false;
|
||||
@@ -192,23 +192,23 @@ bool Hd_CameraModule_readImage::writeData(std::vector<cv::Mat> &mat,QByteArray &
|
||||
}
|
||||
|
||||
//数据解析,
|
||||
bool Hd_CameraModule_readImage::decodeInitData(QByteArray byte, QVector<QByteArray>& vector_data)
|
||||
bool Hd_CameraModule_readImage::decodeInitData(QByteArray byteArray, QVector<QByteArray>& vector_data)
|
||||
{
|
||||
/*while (!byte.isEmpty())
|
||||
/*while (!byteArray.isEmpty())
|
||||
{
|
||||
int type = 0;
|
||||
QByteArray m_type = byte.mid(0, 4);
|
||||
QByteArray m_type = byteArray.mid(0, 4);
|
||||
memcpy((void*)&type, (void*)m_type.data(), 4);
|
||||
byte.remove(0, 4);
|
||||
byteArray.remove(0, 4);
|
||||
|
||||
int len = 0;
|
||||
QByteArray m_len = byte.mid(0, 4);
|
||||
QByteArray m_len = byteArray.mid(0, 4);
|
||||
memcpy((void*)&len, (void*)m_len.data(), 4);
|
||||
byte.remove(0, 4);
|
||||
byteArray.remove(0, 4);
|
||||
|
||||
QByteArray mm_data = byte.mid(0, len);
|
||||
QByteArray mm_data = byteArray.mid(0, len);
|
||||
vector_data.append(mm_data);
|
||||
byte.remove(0, len);
|
||||
byteArray.remove(0, len);
|
||||
}*/
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include "base.h"
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
#pragma comment(lib, "winmm.lib")
|
||||
#pragma execution_character_set("utf-8")
|
||||
@@ -42,7 +41,7 @@ public:
|
||||
//初始化
|
||||
bool initParas(QByteArray&);
|
||||
bool run();
|
||||
bool decodeInitData(QByteArray byte, QVector<QByteArray>& vector_data);
|
||||
bool decodeInitData(QByteArray byteArray, QVector<QByteArray>& vector_data);
|
||||
bool checkStatus();
|
||||
private:
|
||||
int timeout_ms = 5000;
|
||||
|
||||
@@ -246,9 +246,9 @@ void Hd_LogicDll_module::processtask_sendTcpStatus(bool flag)
|
||||
{
|
||||
emit Logic_sendTcpStatus(flag);
|
||||
}
|
||||
void Hd_LogicDll_module::processtask_writeData(QString key, QString cameraName, QString snInfo, QByteArray byte)
|
||||
void Hd_LogicDll_module::processtask_writeData(QString key, QString cameraName, QString snInfo, QByteArray byteArray)
|
||||
{
|
||||
emit Logic_writeData(key, cameraName, snInfo, byte);
|
||||
emit Logic_writeData(key, cameraName, snInfo, byteArray);
|
||||
}
|
||||
void Hd_LogicDll_module::processtask_cameraDisconnect(QString msg, bool status)
|
||||
{
|
||||
|
||||
@@ -56,7 +56,7 @@ signals:
|
||||
void Logic_CommunicationDisconnect(QString msg, bool status);
|
||||
private slots:
|
||||
void processtask_sendTcpStatus(bool flag);
|
||||
void processtask_writeData(QString key, QString cameraName, QString snInfo, QByteArray byte);
|
||||
void processtask_writeData(QString key, QString cameraName, QString snInfo, QByteArray byteArray);
|
||||
void processtask_cameraDisconnect(QString msg, bool status);
|
||||
void processtask_CommunicationDisconnect(QString msg, bool status);
|
||||
};
|
||||
|
||||
@@ -488,12 +488,12 @@ void Logic_camera_thread::setMutex(QMutex *mutex)
|
||||
m_mutex = new QMutex;// mutex;
|
||||
}
|
||||
|
||||
bool Logic_camera_thread::sendDataCommond( QString m_type,cv::Mat mat,QByteArray byte )
|
||||
bool Logic_camera_thread::sendDataCommond( QString m_type,cv::Mat mat,QByteArray byteArray )
|
||||
{
|
||||
QMutexLocker locker(m_mutex);
|
||||
dataPack m_pack;
|
||||
m_pack.mat = mat;
|
||||
m_pack.byte = byte;
|
||||
m_pack.byteArray = byteArray;
|
||||
m_pack.retFlag = m_type;
|
||||
m_pack.cameraName = m_name;
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <QQueue>
|
||||
#include <QMap>
|
||||
#include <QDir>
|
||||
#include <Windows.h>
|
||||
|
||||
#include "struct.h"
|
||||
#include "Logic_hdataintegration.h"
|
||||
@@ -33,7 +32,7 @@ public:
|
||||
void setRunFlag(bool flag){ m_stoprun = flag; }
|
||||
void setMutex( QMutex *mutex);
|
||||
void setSaveImage( QString save){ m_saveImage = save;}
|
||||
bool sendDataCommond(QString m_type,cv::Mat mat,QByteArray byte);
|
||||
bool sendDataCommond(QString m_type,cv::Mat mat,QByteArray byteArray);
|
||||
bool runCameraModule();
|
||||
bool saveImage(std::vector<cv::Mat> mat);
|
||||
//设置相机key、取图超时、模块、拍照面描述、触发方式
|
||||
|
||||
@@ -315,7 +315,7 @@ bool Logic_hdataintegration::triggerConditionList()
|
||||
//or检测:保存路径,拍照面描述,相机key_第几张图,SN_时间戳
|
||||
//and检测:保存路径,拍照面描述,相机key_第几张图,相机key_第几张图,SN_时间戳,SN_时间戳
|
||||
//汇总:保存路径,触发信号_序号列表0,,SN_时间戳
|
||||
detectData.byte = reaultDir.toLocal8Bit();// encodeData(vector_byte); // 结果汇总的数据编码
|
||||
detectData.byteArray = reaultDir.toLocal8Bit();// encodeData(vector_byte); // 结果汇总的数据编码
|
||||
detectData.dstImageMat = vector_mats; // 不做图片汇总
|
||||
detectData.Surface = Surface;
|
||||
algorithmData->addDetectData(detectData);
|
||||
@@ -356,7 +356,7 @@ bool Logic_hdataintegration::triggerConditionList()
|
||||
if (or_conditionFlag == false)
|
||||
continue;
|
||||
// 提取图片和数据
|
||||
QByteArray byte; // 传递算法数据的暂时做保留
|
||||
QByteArray byteArray; // 传递算法数据的暂时做保留
|
||||
QStringList index_list;
|
||||
HCameraData* camera_ptr = station_list.value(m_stationKey)->getCameraData(key);
|
||||
/* stop = clock();
|
||||
@@ -414,7 +414,7 @@ bool Logic_hdataintegration::triggerConditionList()
|
||||
else
|
||||
reaultDir += ",errSN_errDataTime";
|
||||
|
||||
detectData.byte = reaultDir.toLocal8Bit();// encodeSnData(vec_snData); //type:3;len:数据长度;data:数据内容(SN+时间戳)
|
||||
detectData.byteArray = reaultDir.toLocal8Bit();// encodeSnData(vec_snData); //type:3;len:数据长度;data:数据内容(SN+时间戳)
|
||||
//detectData.SN_dataTime = vec_snData; //可以用.byte来解析
|
||||
detectData.Surface = m_cameraData.Surface;
|
||||
algorithmData->addDetectData(detectData);
|
||||
|
||||
@@ -463,7 +463,7 @@ QByteArray HAlgorithmData::getAlgorithmData(QString SNdataTime,QString cameraNam
|
||||
{
|
||||
Algorithm_Result_Data value = algorithm_resultData_S[i];
|
||||
algorithm_resultData_S.removeAt(i);
|
||||
return value.byte;
|
||||
return value.byteArray;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -485,7 +485,7 @@ QByteArray HAlgorithmData::getAlgorithmData(QString SNdataTime,QString cameraNam
|
||||
|
||||
QByteArray HAlgorithmData::getIndexData(Algorithm_Result_Data result_data, int result_index, QString algorithm_result_index)
|
||||
{
|
||||
//qDebug() << __FUNCTION__ << " line: " << __LINE__ << " algorithmKey:" << algorithmKey << " cameraName_and_index: " << cameraName_and_index << " result_data.byte len:" << result_data.byte.length();
|
||||
//qDebug() << __FUNCTION__ << " line: " << __LINE__ << " algorithmKey:" << algorithmKey << " cameraName_and_index: " << cameraName_and_index << " result_data.byteArray len:" << result_data.byteArray.length();
|
||||
|
||||
Algorithm_Result_Data_index index_pack;
|
||||
if (map_delete_Result_index.keys().contains(result_data.key_index))
|
||||
@@ -503,10 +503,10 @@ QByteArray HAlgorithmData::getIndexData(Algorithm_Result_Data result_data, int r
|
||||
QString cameraName = list.at(0);
|
||||
QString task_index = list.at(1);
|
||||
//Logic_taskthread运行算法/汇总模块后,返回的数据
|
||||
QByteArray byte = result_data.byte;
|
||||
QByteArray byteArray = result_data.byteArray;
|
||||
//result_data.byte转
|
||||
QByteArrayList vec_Data;
|
||||
vec_Data = byte.split('#');
|
||||
vec_Data = byteArray.split('#');
|
||||
|
||||
if (vec_Data.isEmpty())
|
||||
{
|
||||
@@ -520,7 +520,7 @@ QByteArray HAlgorithmData::getIndexData(Algorithm_Result_Data result_data, int r
|
||||
return index_byte;
|
||||
}
|
||||
|
||||
index_byte = vec_Data[algorithm_result_index.toInt()];// byte;// QByteArray::fromStdString(sendMsg);
|
||||
index_byte = vec_Data[algorithm_result_index.toInt()];// byteArray;// QByteArray::fromStdString(sendMsg);
|
||||
|
||||
// 删除map中的数据
|
||||
if (vec_Data.size() == 1)
|
||||
@@ -619,7 +619,7 @@ bool HAlgorithmExecData::getDetectData(testData& picVec)
|
||||
|
||||
picVec.cameraName = picVec1.cameraName; // 提取名称
|
||||
picVec.task_index = picVec1.task_index; // 任务下标
|
||||
picVec.byte = picVec1.byte;
|
||||
picVec.byteArray = picVec1.byteArray;
|
||||
for (int i = 0; i < m_detectData.head().dstImageMat.size(); i++)
|
||||
{
|
||||
cv::Mat img = cv::Mat();
|
||||
@@ -810,7 +810,7 @@ void HStationData::addAlgorithmResultData(QString algorithmKey, QString index, Q
|
||||
}
|
||||
}
|
||||
Algorithm_Result_Data result_data;
|
||||
result_data.byte = NG_data;
|
||||
result_data.byteArray = NG_data;
|
||||
result_data.SN_dataTime = SN_datatime;
|
||||
|
||||
if (algorithm_ptr)
|
||||
|
||||
@@ -22,7 +22,7 @@ typedef struct
|
||||
//or检测:保存路径,拍照面描述,相机key_第几张图,SN_时间戳
|
||||
//and检测:保存路径,拍照面描述,相机key_第几张图,相机key_第几张图,SN_时间戳,SN_时间戳
|
||||
//汇总:保存路径,触发信号_序号列表0,,SN_时间戳
|
||||
QByteArray byte;
|
||||
QByteArray byteArray;
|
||||
std::vector<cv::Mat> dstImageMat;
|
||||
//拍照面描述
|
||||
QString Surface;
|
||||
@@ -72,7 +72,7 @@ typedef struct
|
||||
{
|
||||
QString SN_dataTime; //SN+时间戳
|
||||
QString key_index; //示例:key camera1_1,algorithm1
|
||||
QByteArray byte; // 存储算法结果数据
|
||||
QByteArray byteArray; // 存储算法结果数据
|
||||
std::vector<cv::Mat> dstImageMat; // 存储算法结果图
|
||||
}Algorithm_Result_Data;
|
||||
|
||||
|
||||
@@ -201,8 +201,8 @@ void Logic_myiothread::run()
|
||||
if (!m_heartCmd.isEmpty())
|
||||
{// 发送心跳
|
||||
////QMutexLocker locker(m_iomutex);;
|
||||
QByteArray byte = m_heartCmd.toUtf8(); // 设置 从起始位开始读取的指令
|
||||
if (!finstcp_ptr->writeData(vec_mat, byte))
|
||||
QByteArray byteArray = m_heartCmd.toUtf8(); // 设置 从起始位开始读取的指令
|
||||
if (!finstcp_ptr->writeData(vec_mat, byteArray))
|
||||
{
|
||||
qCritical() << __FUNCTION__ << "line:" << __LINE__ << " finstcp_ptr reciveData error!";
|
||||
}
|
||||
@@ -217,8 +217,8 @@ void Logic_myiothread::run()
|
||||
{
|
||||
// 修改读取多个命令
|
||||
//QMutexLocker locker(m_iomutex);;
|
||||
QByteArray byte = readAll_cmd.toUtf8(); // 设置 从起始位开始读取的指令
|
||||
if (!finstcp_ptr->writeData(vec_mat, byte))
|
||||
QByteArray byteArray = readAll_cmd.toUtf8(); // 设置 从起始位开始读取的指令
|
||||
if (!finstcp_ptr->writeData(vec_mat, byteArray))
|
||||
{
|
||||
qCritical() << __FUNCTION__ << "line:" << __LINE__ << " finstcp_ptr reciveData error!";
|
||||
}
|
||||
@@ -296,7 +296,7 @@ void Logic_myiothread::run()
|
||||
dataPack m_data;
|
||||
m_data.algorithmName = "程序号";
|
||||
m_data.cameraName = m_startpos;
|
||||
m_data.byte = QByteArray::number(vec_value.at(trigger_index));
|
||||
m_data.byteArray = QByteArray::number(vec_value.at(trigger_index));
|
||||
m_data.retFlag = "algorithm";
|
||||
|
||||
QMutexLocker locker(sendProcess_mutex);
|
||||
@@ -362,8 +362,8 @@ void Logic_myiothread::reciveCommond()
|
||||
// 修改读取多个命令
|
||||
//QMutexLocker locker ( m_iomutex );
|
||||
m_iomutex->lock();
|
||||
QByteArray byte = readAll_cmd.toUtf8(); // 设置 从起始位开始读取的指令
|
||||
if ( !finstcp_ptr->writeData(vec_mat,byte) )
|
||||
QByteArray byteArray = readAll_cmd.toUtf8(); // 设置 从起始位开始读取的指令
|
||||
if ( !finstcp_ptr->writeData(vec_mat,byteArray) )
|
||||
{
|
||||
qCritical() << __FUNCTION__ << "line:"<< __LINE__ << " finstcp_ptr reciveData error!";
|
||||
}
|
||||
@@ -387,17 +387,17 @@ void Logic_myiothread::reciveCommond()
|
||||
}
|
||||
|
||||
// 读取多个命令信息的解析
|
||||
void Logic_myiothread::decodeCameraCMD(QByteArray byte)
|
||||
void Logic_myiothread::decodeCameraCMD(QByteArray byteArray)
|
||||
{
|
||||
if (byte.isEmpty())
|
||||
if (byteArray.isEmpty())
|
||||
return;
|
||||
|
||||
readsnByte = byte;
|
||||
readsnByte = byteArray;
|
||||
vec_value.clear();
|
||||
while ( !byte.isEmpty() )
|
||||
while ( !byteArray.isEmpty() )
|
||||
{
|
||||
QByteArray retByte = byte.mid(0,2);
|
||||
byte.remove(0,2);
|
||||
QByteArray retByte = byteArray.mid(0,2);
|
||||
byteArray.remove(0,2);
|
||||
|
||||
QString msg = retByte.toHex();
|
||||
int number_tmp = msg.toInt(NULL,16);
|
||||
@@ -426,7 +426,7 @@ void Logic_myiothread::decodeCameraCMD(QByteArray byte)
|
||||
//SN逻辑
|
||||
// "读SN信号"满足时,代表新料来了,安装"清理容器数据"-"相机列表"及"通道序号"清理对应的容器;
|
||||
//SN保存到容器HSnData;下料的SN,根据"汇总-触发信号"、"汇总-读哪个SN"匹配Logic_hdataintegration,并保存SN到变量;
|
||||
void Logic_myiothread::readSnInfo(QVector<int> vec_value, QByteArray byte)
|
||||
void Logic_myiothread::readSnInfo(QVector<int> vec_value, QByteArray byteArray)
|
||||
{
|
||||
QStringList keys = map_sn_area_array.keys();
|
||||
//重新加载用
|
||||
@@ -566,7 +566,7 @@ void Logic_myiothread::readSnInfo(QVector<int> vec_value, QByteArray byte)
|
||||
for (int aaa = 0; aaa < read_datatime_list.size(); aaa++)
|
||||
{
|
||||
//SN为""时,返回配置文件的read_sn_error_send_format值
|
||||
QString datatime = getSn(read_sn_error_send_format, read_datatime_list[aaa].toString(), byte);
|
||||
QString datatime = getSn(read_sn_error_send_format, read_datatime_list[aaa].toString(), byteArray);
|
||||
qDebug() << __FUNCTION__ << " line: " << __LINE__ << " channel_index: " << channel_index << " read_datatime_list: " << datatime;
|
||||
//sn_value = snHex(sn_value); // sn方向相反,重新做转换
|
||||
|
||||
@@ -638,7 +638,7 @@ void Logic_myiothread::readSnInfo(QVector<int> vec_value, QByteArray byte)
|
||||
for (int aaa = 0; aaa < read_sn_list.size(); aaa++)
|
||||
{
|
||||
//SN为""时,返回配置文件的read_sn_error_send_format值
|
||||
QString sn_value = getSn(read_sn_error_send_format, read_sn_list[aaa].toString(), byte);
|
||||
QString sn_value = getSn(read_sn_error_send_format, read_sn_list[aaa].toString(), byteArray);
|
||||
qDebug() << __FUNCTION__ << " line: " << __LINE__ << " channel_index: " << channel_index << " sn_value: " << sn_value;
|
||||
//sn_value = snHex(sn_value); // sn方向相反,重新做转换
|
||||
//异常
|
||||
@@ -873,7 +873,7 @@ QString Logic_myiothread::snHex(QString sn)
|
||||
return resultStr;
|
||||
}
|
||||
//SN为""时,返回配置文件的"读SN异常-插值"
|
||||
QString Logic_myiothread::getSn(QString errorinfo,QString area,QByteArray byte)
|
||||
QString Logic_myiothread::getSn(QString errorinfo,QString area,QByteArray byteArray)
|
||||
{
|
||||
QString m_startpos = area.split("_")[0];
|
||||
QString lenght = area.split("_")[1];
|
||||
@@ -881,7 +881,7 @@ QString Logic_myiothread::getSn(QString errorinfo,QString area,QByteArray byte)
|
||||
int start_index = m_startpos.mid(1,m_startpos.length()-1).toInt();
|
||||
start_index -= trigger_startpos;
|
||||
|
||||
QByteArray snByte = byte.mid(start_index*2,lenght.toInt());
|
||||
QByteArray snByte = byteArray.mid(start_index*2,lenght.toInt());
|
||||
QString sn = snByte;
|
||||
|
||||
if ( sn.contains("\n\r") )
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "qfuture.h"
|
||||
#include <QtConcurrent/qtconcurrent>
|
||||
#include <qmessagebox.h>
|
||||
#include <rlib/fileManager.h>s
|
||||
|
||||
//总相机线程类列表
|
||||
QList<Logic_camera_thread*> camerathreadlist;
|
||||
@@ -121,10 +122,18 @@ bool Logic_processtask::check_cmeraCfg(QJsonObject obj, QString& allMessage)
|
||||
int allFailNum = 0;
|
||||
//QString allMessage;
|
||||
if (myQString.isEmpty())
|
||||
allMessage += "第 " + QString::number(allFailNum++) + "条 :保存图片总文件夹,为空\r\n";
|
||||
{
|
||||
//allMessage += "第 " + QString::number(allFailNum++) + "条 :保存图片总文件夹,为空\r\n";
|
||||
allMessage += "第 " + QString::number(allFailNum) + "条 :保存图片总文件夹为空但已创建\r\n";
|
||||
fileManager::createDirectoryIfNotExists(myQString.toStdString());
|
||||
}
|
||||
QDir dir(myQString);
|
||||
if (!dir.exists())
|
||||
allMessage += "第 " + QString::number(allFailNum++) + "条 :保存图片总文件夹:" + myQString + " 不存在\r\n";
|
||||
{
|
||||
//allMessage += "第 " + QString::number(allFailNum) + "条 :保存图片总文件夹:" + myQString + " 不存在\r\n";
|
||||
allMessage += "第 " + QString::number(allFailNum) + "条 :保存图片总文件夹:" + myQString + " 不存在但已创建\r\n";
|
||||
fileManager::createDirectoryIfNotExists(myQString.toStdString());
|
||||
}
|
||||
myQString = m_jsonObj.value("数据保存天数").toString();
|
||||
if (myQString.toInt() <= 0)
|
||||
allMessage += "第 " + QString::number(allFailNum++) + "条 :数据保存天数,值错误\r\n";
|
||||
@@ -2519,7 +2528,7 @@ void Logic_processtask::reciveImageData()
|
||||
QString algorithmName = m_data.algorithmName;
|
||||
QString retFlag = m_data.retFlag;
|
||||
QString sendNgInfo = m_data.sendNgInfo;
|
||||
QByteArray m_byte = m_data.byte;
|
||||
QByteArray m_byte = m_data.byteArray;
|
||||
if (snInfo.isEmpty())
|
||||
Sleep(1);
|
||||
// 传递图片
|
||||
|
||||
@@ -153,7 +153,7 @@ bool Logic_taskthread::processTask()
|
||||
//汇总:保存路径,拍照面描述,触发信号_序号列表0,,SN_时间戳
|
||||
//m_data.byte
|
||||
//std::cout << "camera_name_index[0]::" << camera_name_index[0].toStdString() << std::endl;
|
||||
AlgorithmModuleProcessData(m_module.module_key, camera_name_index, m_data.dstImageMat, m_data.byte);
|
||||
AlgorithmModuleProcessData(m_module.module_key, camera_name_index, m_data.dstImageMat, m_data.byteArray);
|
||||
m_ptr->deleteDetectData();
|
||||
/*stop = clock();
|
||||
qDebug() << "m_module.module_key::" << m_module.module_key << " Logic_taskthread cut Time ::" << stop - start ;
|
||||
@@ -322,14 +322,14 @@ bool Logic_taskthread::sendDataToModule(QVector<QString> camera_name_index, std:
|
||||
return true;
|
||||
}
|
||||
|
||||
QString Logic_taskthread::getSnDataInfo ( QByteArray byte )
|
||||
QString Logic_taskthread::getSnDataInfo ( QByteArray byteArray )
|
||||
{
|
||||
if ( byte.isEmpty() )
|
||||
if ( byteArray.isEmpty() )
|
||||
return nullptr;
|
||||
else
|
||||
{
|
||||
QByteArrayList vec_ret;
|
||||
if ( decodeAiValue( byte, vec_ret ) )
|
||||
if ( decodeAiValue( byteArray, vec_ret ) )
|
||||
{
|
||||
if ( !vec_ret.isEmpty() )
|
||||
{
|
||||
@@ -342,7 +342,7 @@ QString Logic_taskthread::getSnDataInfo ( QByteArray byte )
|
||||
|
||||
|
||||
//添加数据到最前面
|
||||
bool Logic_taskthread::encodeAppendData(QVector<QString> append_value, QByteArray &byte)
|
||||
bool Logic_taskthread::encodeAppendData(QVector<QString> append_value, QByteArray &byteArray)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -370,13 +370,13 @@ bool Logic_taskthread::encodeAppendData(QVector<QString> append_value, QByteArra
|
||||
}
|
||||
resultByte = QByteArray::fromStdString(sendMsg);
|
||||
|
||||
if (byte.isEmpty())
|
||||
if (byteArray.isEmpty())
|
||||
{
|
||||
byte = resultByte;
|
||||
byteArray = resultByte;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte = resultByte.append(byte);
|
||||
byteArray = resultByte.append(byteArray);
|
||||
}
|
||||
}
|
||||
catch (QString ev)
|
||||
@@ -387,30 +387,30 @@ bool Logic_taskthread::encodeAppendData(QVector<QString> append_value, QByteArra
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Logic_taskthread::decodereciveValue(QByteArray byte, QVector<QByteArray>& vec_ret)
|
||||
bool Logic_taskthread::decodereciveValue(QByteArray byteArray, QVector<QByteArray>& vec_ret)
|
||||
{
|
||||
while (!byte.isEmpty())
|
||||
while (!byteArray.isEmpty())
|
||||
{
|
||||
int type = 0;
|
||||
QByteArray m_type = byte.mid(0, 4);
|
||||
QByteArray m_type = byteArray.mid(0, 4);
|
||||
memcpy((void*)&type, (void*)m_type.data(), 4);
|
||||
byte.remove(0, 4);
|
||||
byteArray.remove(0, 4);
|
||||
|
||||
int len = 0;
|
||||
QByteArray m_len = byte.mid(0, 4);
|
||||
QByteArray m_len = byteArray.mid(0, 4);
|
||||
memcpy((void*)&len, (void*)m_len.data(), 4);
|
||||
byte.remove(0, 4);
|
||||
byteArray.remove(0, 4);
|
||||
|
||||
QByteArray mm_data = byte.mid(0, len);
|
||||
QByteArray mm_data = byteArray.mid(0, len);
|
||||
vec_ret.append(mm_data);
|
||||
byte.remove(0, len);
|
||||
byteArray.remove(0, len);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//保存算法结果数据到容器
|
||||
bool Logic_taskthread::saveAlgorithmData(testData m_testdata, int index, QByteArray byte)
|
||||
bool Logic_taskthread::saveAlgorithmData(testData m_testdata, int index, QByteArray byteArray)
|
||||
{
|
||||
//for (int i = 0; i < m_testdata.cameraName.size(); i++)
|
||||
{
|
||||
@@ -418,7 +418,7 @@ bool Logic_taskthread::saveAlgorithmData(testData m_testdata, int index, QByteAr
|
||||
QString task_index = m_testdata.task_index[index];
|
||||
|
||||
Algorithm_Result_Data result_data;
|
||||
result_data.byte = byte;
|
||||
result_data.byteArray = byteArray;
|
||||
if (m_testdata.SN_dataTime.size())
|
||||
result_data.SN_dataTime = m_testdata.SN_dataTime[0]; //这里暂时只取了第一个SN;即一张图对应一个SN;一张图里有2个产品的情况,应该在回调函数放两次图
|
||||
|
||||
@@ -482,14 +482,14 @@ bool Logic_taskthread::sendCatchCommond(QVector<QString> camera_name_index)
|
||||
}
|
||||
|
||||
|
||||
bool Logic_taskthread::decodeAiValue(QByteArray byte, QByteArrayList &vec_ret)
|
||||
bool Logic_taskthread::decodeAiValue(QByteArray byteArray, QByteArrayList &vec_ret)
|
||||
{
|
||||
if(byte.isEmpty())
|
||||
if(byteArray.isEmpty())
|
||||
{
|
||||
qCritical() << __FUNCTION__ << "line:" << __LINE__ << " byte is null!";
|
||||
return false;
|
||||
}
|
||||
vec_ret = byte.split('#');
|
||||
vec_ret = byteArray.split('#');
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -566,7 +566,7 @@ bool Logic_taskthread::writeTcpData(QMap<QString,QString> key_value)
|
||||
|
||||
QByteArray Logic_taskthread::writeFormat(QString startPos, QVector<QString> vector_value)
|
||||
{
|
||||
QByteArray byte;
|
||||
QByteArray byteArray;
|
||||
QString write_format;
|
||||
|
||||
// 其他格式 按照 长度+数据写入 进行编码
|
||||
@@ -584,11 +584,11 @@ QByteArray Logic_taskthread::writeFormat(QString startPos, QVector<QString> vect
|
||||
write_format = startPos + "_" + sendData;
|
||||
else write_format = sendData;
|
||||
|
||||
byte = write_format.toLocal8Bit();
|
||||
return byte;
|
||||
byteArray = write_format.toLocal8Bit();
|
||||
return byteArray;
|
||||
}
|
||||
//保存结果图到容器并UI显示;发送结果数据给PLC
|
||||
bool Logic_taskthread::sendDataCommond( QString m_type, QVector<QString> camera_name_index, std::vector<cv::Mat> mat,QByteArray byte )
|
||||
bool Logic_taskthread::sendDataCommond( QString m_type, QVector<QString> camera_name_index, std::vector<cv::Mat> mat,QByteArray byteArray)
|
||||
{
|
||||
// 界面显示包
|
||||
QMutexLocker locker(m_image_lock);
|
||||
@@ -625,7 +625,7 @@ bool Logic_taskthread::sendDataCommond( QString m_type, QVector<QString> camera_
|
||||
}
|
||||
}
|
||||
|
||||
if (!byte.contains("null"))
|
||||
if (!byteArray.contains("null"))
|
||||
{
|
||||
foreach(QString send_usual_result, m_send_usual_result.vector_algorithm_usual_feedback_plcpos)
|
||||
{
|
||||
@@ -644,15 +644,15 @@ bool Logic_taskthread::sendDataCommond( QString m_type, QVector<QString> camera_
|
||||
if (save_data_flag == "true")
|
||||
{
|
||||
//保存算法结果数据到容器
|
||||
saveAlgorithmData(m_exec_testData, ci, byte);
|
||||
saveAlgorithmData(m_exec_testData, ci, byteArray);
|
||||
}
|
||||
|
||||
// 发送检测模块的结果到PLC
|
||||
if (send_data_flag == "true")
|
||||
{
|
||||
QString sbyte = byte;
|
||||
QString sbyte = byteArray;
|
||||
//发送数据给PLC
|
||||
if (!writeAiCommond(m_name, camera_name_index[ci], byte))
|
||||
if (!writeAiCommond(m_name, camera_name_index[ci], byteArray))
|
||||
{
|
||||
qCritical() << __FUNCTION__ << " line:" << __LINE__ << " ---- writeAiCommond is failed!"<<" byte,"<< sbyte;
|
||||
}
|
||||
@@ -663,7 +663,7 @@ bool Logic_taskthread::sendDataCommond( QString m_type, QVector<QString> camera_
|
||||
send_ng_info.clear();
|
||||
//汇总算法删除,检测算法不删。
|
||||
//获取第一组sn;//获取次数是sn容器长度的倍数时,删一个数据
|
||||
bool ifdeleSn = deleteSnData(byte, sndata, send_ng_info);
|
||||
bool ifdeleSn = deleteSnData(byteArray, sndata, send_ng_info);
|
||||
|
||||
//汇总算法
|
||||
// 传递给界面用来显示产品的sn码
|
||||
@@ -694,7 +694,7 @@ bool Logic_taskthread::sendDataCommond( QString m_type, QVector<QString> camera_
|
||||
// cv::resize(mat[ci], mat[ci], cv::Size(), 0.5, 0.5); //图像大时(内存、cpu占用大),耗时长。
|
||||
m_pack.mat = mat[ci].clone();
|
||||
}
|
||||
m_pack.byte = byte;
|
||||
m_pack.byteArray = byteArray;
|
||||
m_pack.retFlag = m_type;
|
||||
|
||||
if (!queue_exec_cameraName.isEmpty())
|
||||
@@ -752,7 +752,7 @@ bool Logic_taskthread::getdataPack(dataPack& myDataPack)
|
||||
else return false;
|
||||
}
|
||||
//汇总算法,删除SN,所有相机线程的snIndex减一
|
||||
bool Logic_taskthread::deleteSnData ( QByteArray byte, QVector<QString>& sndata,QString &send_ng_info)
|
||||
bool Logic_taskthread::deleteSnData ( QByteArray byteArray, QVector<QString>& sndata,QString &send_ng_info)
|
||||
{
|
||||
// 读取sn区域的位置下标;只在汇总算法有,检测算法无
|
||||
QString read_sn_area_index = m_sn_set_object.value("汇总-读哪个上料通道的SN").toString();
|
||||
@@ -808,9 +808,9 @@ bool Logic_taskthread::deleteSnData ( QByteArray byte, QVector<QString>& sndata,
|
||||
}
|
||||
|
||||
// 算法结果 写入plc
|
||||
bool Logic_taskthread::writeAiCommond ( QString cameraName,QString camera_name_index,QByteArray byte )
|
||||
bool Logic_taskthread::writeAiCommond ( QString cameraName,QString camera_name_index,QByteArray byteArray )
|
||||
{
|
||||
QByteArrayList PLCvec_ret= byte.split('*'); // 存储结果的
|
||||
QByteArrayList PLCvec_ret= byteArray.split('*'); // 存储结果的
|
||||
|
||||
if (PLCvec_ret.isEmpty() )
|
||||
{
|
||||
|
||||
@@ -30,19 +30,19 @@ public:
|
||||
bool processTask();//循环取检测数据,传到检测模块运行
|
||||
bool appendPlcCmd(QJsonObject);
|
||||
bool sendCatchCommond(QVector<QString> camera_name_index);
|
||||
bool sendDataCommond( QString m_type, QVector<QString> camera_name_index, std::vector<cv::Mat> mat,QByteArray byte );
|
||||
bool saveAlgorithmData ( testData m_testdata,int index,QByteArray byte);
|
||||
bool writeAiCommond(QString cameraName,QString camera_name_index,QByteArray byte);
|
||||
bool sendDataCommond( QString m_type, QVector<QString> camera_name_index, std::vector<cv::Mat> mat,QByteArray byteArray );
|
||||
bool saveAlgorithmData ( testData m_testdata,int index,QByteArray byteArray);
|
||||
bool writeAiCommond(QString cameraName,QString camera_name_index,QByteArray byteArray);
|
||||
bool writeTcpData(QMap<QString,QString> map);
|
||||
bool decodeAiValue(QByteArray byte, QByteArrayList&vec_ret);
|
||||
bool AlgorithmModuleProcessData(QString key, QVector<QString> camera_name_index,std::vector<cv::Mat> camera_mat,QByteArray byte); // 处理数据
|
||||
bool deleteSnData( QByteArray byte,QVector<QString> &sndata,QString &send_ng_info); // 获取sn码,然后删除容器中的SN码,第三个参数是表示是否发送界面显示NG信息
|
||||
bool sendDataToModule(QVector<QString> name, std::vector<cv::Mat> vector_mat,QByteArray byte);
|
||||
bool encodeAppendData(QVector<QString> append_value,QByteArray& byte);
|
||||
bool decodereciveValue(QByteArray byte, QVector<QByteArray>& vec_ret);
|
||||
bool decodeAiValue(QByteArray byteArray, QByteArrayList&vec_ret);
|
||||
bool AlgorithmModuleProcessData(QString key, QVector<QString> camera_name_index,std::vector<cv::Mat> camera_mat,QByteArray byteArray); // 处理数据
|
||||
bool deleteSnData( QByteArray byteArray,QVector<QString> &sndata,QString &send_ng_info); // 获取sn码,然后删除容器中的SN码,第三个参数是表示是否发送界面显示NG信息
|
||||
bool sendDataToModule(QVector<QString> name, std::vector<cv::Mat> vector_mat,QByteArray byteArray);
|
||||
bool encodeAppendData(QVector<QString> append_value,QByteArray& byteArray);
|
||||
bool decodereciveValue(QByteArray byteArray, QVector<QByteArray>& vec_ret);
|
||||
QVector<QString> getWriteVector(QString& startPos, QMap<QString, QString>& map);
|
||||
QByteArray writeFormat(QString startPos, QVector<QString> vector_value); // 写入的起始位置,写入的内容+长度
|
||||
QString getSnDataInfo(QByteArray byte);
|
||||
QString getSnDataInfo(QByteArray byteArray);
|
||||
bool setmySaveImagethreadIndex(int i)
|
||||
{
|
||||
mysaveimagethreadindex = i;
|
||||
|
||||
@@ -0,0 +1,393 @@
|
||||
//#include<qstring.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <qdir.h>
|
||||
#include <io.h>
|
||||
#include <qtimer.h>
|
||||
#include <qthread.h>
|
||||
#include <qdatetime.h>
|
||||
#include <qstorageinfo.h>
|
||||
#include <qdebug.h>
|
||||
#include <iostream>
|
||||
#include <qfiledialog.h>
|
||||
#include <filesystem>
|
||||
|
||||
class fileManager
|
||||
{
|
||||
public:
|
||||
static QString openFolderDialog()
|
||||
{
|
||||
QString folderPath = QFileDialog::getExistingDirectory(
|
||||
nullptr,
|
||||
"Select Folder",
|
||||
QDir::homePath(), // 默认路径,可以根据需要更改
|
||||
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
|
||||
|
||||
if (!folderPath.isEmpty()) {
|
||||
// 用户选择了文件夹
|
||||
qDebug() << "Selected Folder: " << folderPath;
|
||||
}
|
||||
else {
|
||||
// 用户取消了选择
|
||||
qDebug() << "Folder selection canceled.";
|
||||
}
|
||||
|
||||
return folderPath;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取所有文件夹
|
||||
/// </summary>
|
||||
/// <param name="folderPath"></param>
|
||||
/// <param name="folderNames"></param>
|
||||
static std::vector<std::string> getAllDirs(const QString& folderPath)
|
||||
{
|
||||
std::vector<std::string> foldersVec;
|
||||
QDir folderDir(folderPath);
|
||||
if (!folderDir.exists()) {
|
||||
return foldersVec;
|
||||
}
|
||||
|
||||
QStringList folders = folderDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
|
||||
|
||||
for (const QString& folder : folders) {
|
||||
foldersVec.push_back(folder.toStdString());
|
||||
}
|
||||
return foldersVec;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取文件夹下格式的文件,以vector<string>返回
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="files"></param>
|
||||
/// <param name="format"></param>
|
||||
static void getAllFiles(std::string path, std::vector<std::string>& files, std::string format, int targetDepth = INT_MAX, int depth = 0)
|
||||
{
|
||||
if (depth >= targetDepth)
|
||||
return;
|
||||
intptr_t hFile = 0;
|
||||
struct _finddata_t fileinfo;
|
||||
std::string p;
|
||||
if ((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(), &fileinfo)) != -1)
|
||||
{
|
||||
do
|
||||
{
|
||||
if ((fileinfo.attrib & _A_SUBDIR))
|
||||
{
|
||||
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
|
||||
{
|
||||
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
|
||||
depth++;
|
||||
getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files, format, targetDepth ,depth);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
|
||||
}
|
||||
} while (_findnext(hFile, &fileinfo) == 0);
|
||||
_findclose(hFile);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取文件夹下的图片,以vector<string>返回
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="files"></param>
|
||||
/// <param name="format"></param>
|
||||
static void getAllImages(std::string path, std::vector<std::string>& files, std::string format, int targetDepth = INT_MAX, int depth = 0)
|
||||
{
|
||||
if (depth >= targetDepth)
|
||||
return;
|
||||
intptr_t hFile = 0;
|
||||
struct _finddata_t fileinfo;
|
||||
std::string p;
|
||||
if ((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(), &fileinfo)) != -1)
|
||||
{
|
||||
do
|
||||
{
|
||||
if ((fileinfo.attrib & _A_SUBDIR))
|
||||
{
|
||||
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
|
||||
{
|
||||
std::string filePath = p.assign(path).append("\\").append(fileinfo.name);
|
||||
if (fileManager::isImageFile(filePath) == true)
|
||||
files.push_back(filePath);
|
||||
depth++;
|
||||
getAllImages(filePath, files, format, targetDepth, depth);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string filePath = p.assign(path).append("\\").append(fileinfo.name);
|
||||
if (fileManager::isImageFile(filePath) == true)
|
||||
files.push_back(filePath);
|
||||
}
|
||||
} while (_findnext(hFile, &fileinfo) == 0);
|
||||
_findclose(hFile);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 检查磁盘剩余空间,以GB为单位返回
|
||||
/// </summary>
|
||||
/// <param name="folderPath">example"E://""E://111/222"支持文件夹或者磁盘路径</param>
|
||||
/// <returns></returns>
|
||||
static int getDriveFreeSpaceAsGb(const QString& folderPath) {
|
||||
QStorageInfo storageInfo(folderPath);
|
||||
|
||||
if (storageInfo.isValid() && storageInfo.isReady()) {
|
||||
return storageInfo.bytesAvailable() / 1073741824;
|
||||
}
|
||||
|
||||
return -1; // Indicate failure to retrieve disk space
|
||||
}
|
||||
/// <summary>
|
||||
/// 检查磁盘剩余空间,以Mb为单位返回
|
||||
/// </summary>
|
||||
/// <param name="folderPath">example"E://""E://111/222"支持文件夹或者磁盘路径</param>
|
||||
/// <returns></returns>
|
||||
static int getDriveFreeSpaceAsMb(const QString& folderPath) {
|
||||
QStorageInfo storageInfo(folderPath);
|
||||
|
||||
if (storageInfo.isValid() && storageInfo.isReady()) {
|
||||
return storageInfo.bytesAvailable() / 1048576;
|
||||
}
|
||||
|
||||
return -1; // Indicate failure to retrieve disk space
|
||||
}
|
||||
/// <summary>
|
||||
/// 返回最老创建时间文件夹名
|
||||
/// </summary>
|
||||
/// <param name="folderPath"></param>
|
||||
/// <returns></returns>
|
||||
static QString getOldestDir(const QString& folderPath)
|
||||
{
|
||||
std::string oldestDir;
|
||||
QDateTime oldestTime;
|
||||
std::vector<std::string> files= getAllDirs(folderPath);
|
||||
for (auto file : files)
|
||||
{
|
||||
QFileInfo fileInfo(QString::fromStdString(folderPath.toStdString() + "//" + file));
|
||||
QDateTime fileTime = fileInfo.created();
|
||||
QString str = fileInfo.created().toString();
|
||||
std::cout << "Current date and time: " << str.toStdString() << std::endl;
|
||||
if (oldestTime.isNull() || fileTime < oldestTime)
|
||||
{
|
||||
oldestTime = fileTime;
|
||||
oldestDir = file;
|
||||
}
|
||||
}
|
||||
return QString::fromStdString(oldestDir);
|
||||
}
|
||||
/// <summary>
|
||||
/// 删除最老创建时间文件夹
|
||||
/// </summary>
|
||||
/// <param name="folderPath"></param>
|
||||
/// <returns></returns>
|
||||
static bool deleteOldestDir(const QString& folderPath)
|
||||
{
|
||||
QString oldestDir =getOldestDir(folderPath);
|
||||
if (oldestDir.isEmpty())
|
||||
return false;
|
||||
oldestDir= folderPath+ "//" + oldestDir;
|
||||
QDir dir(oldestDir);
|
||||
dir.removeRecursively();
|
||||
return true;
|
||||
}
|
||||
/// <summary>
|
||||
/// 删除最老子文件夹
|
||||
/// </summary>
|
||||
/// <param name="folderPath"></param>
|
||||
/// <returns></returns>
|
||||
static bool deleteOldestSonDir(const QString& folderPath)
|
||||
{
|
||||
QString oldestDir = getOldestDir(folderPath);
|
||||
if (oldestDir.isEmpty())
|
||||
return false;
|
||||
oldestDir = folderPath + "//" + oldestDir;
|
||||
deleteOldestDir(oldestDir);
|
||||
if (getAllDirs(oldestDir).size() == 0)//删除后文件夹为空,删除父文件夹
|
||||
{
|
||||
QDir dir(oldestDir);
|
||||
dir.removeRecursively();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/// <summary>
|
||||
/// 删除几天前的所有文件夹
|
||||
/// </summary>
|
||||
/// <param name="folderPath"></param>
|
||||
/// <param name="day"></param>
|
||||
/// <returns></returns>
|
||||
static bool deleteDirBeforeDays(const QString& folderPath, int day)
|
||||
{
|
||||
std::vector<std::string> files=getAllDirs(folderPath);
|
||||
for (auto file : files)
|
||||
{
|
||||
QFileInfo fileInfo(QString::fromStdString(file));
|
||||
QDateTime fileTime = fileInfo.created();
|
||||
QDateTime nowTime = QDateTime::currentDateTime();
|
||||
if (fileTime.daysTo(nowTime) > day)
|
||||
{
|
||||
QDir dir(QString::fromStdString(file));
|
||||
dir.removeRecursively();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//去除重复分割符
|
||||
static QString normalizePathSeparators(const QString& path) {
|
||||
QString normalizedPath = path;
|
||||
|
||||
// Replace backslashes with forward slashes
|
||||
normalizedPath.replace('\\', '/');
|
||||
|
||||
// Remove consecutive forward slashes
|
||||
QString doubleSlash = "//";
|
||||
while (normalizedPath.contains(doubleSlash)) {
|
||||
normalizedPath.replace(doubleSlash, "/");
|
||||
}
|
||||
|
||||
return normalizedPath;
|
||||
}
|
||||
|
||||
static bool isImageFile(const std::string& filename) {
|
||||
const std::string imageExtensions[] = { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".webp" };
|
||||
|
||||
std::string lowerFilename = filename;
|
||||
std::transform(lowerFilename.begin(), lowerFilename.end(), lowerFilename.begin(), [](unsigned char c) { return std::tolower(c); });
|
||||
|
||||
for (const std::string& ext : imageExtensions) {
|
||||
if (lowerFilename.size() >= ext.size() &&
|
||||
lowerFilename.compare(lowerFilename.size() - ext.size(), ext.size(), ext) == 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
static std::string getFileName(std::string path)
|
||||
{
|
||||
if (path.find("\\") != std::string::npos)
|
||||
return path.substr(path.find_last_of("\\") + 1, path.find_last_of(".") - path.find_last_of("\\") - 1);
|
||||
return path.substr(path.find_last_of("/") + 1, path.find_last_of(".") - path.find_last_of("/") - 1);
|
||||
}
|
||||
static QString getFileName(const QString& path) {
|
||||
int lastSlashIndex = path.lastIndexOf('/');
|
||||
if (lastSlashIndex == -1) {
|
||||
lastSlashIndex = path.lastIndexOf('\\');
|
||||
}
|
||||
|
||||
int lastDotIndex = path.lastIndexOf('.');
|
||||
|
||||
if (lastDotIndex == -1 || lastDotIndex < lastSlashIndex) {
|
||||
return path.mid(lastSlashIndex + 1);
|
||||
}
|
||||
else {
|
||||
return path.mid(lastSlashIndex + 1, lastDotIndex - lastSlashIndex - 1);
|
||||
}
|
||||
}
|
||||
//统一地址分隔符
|
||||
static QString normalizePathStr(const QString& address, QChar targetSeparator = '/') {
|
||||
QString normalizedAddress = address;
|
||||
for (int i = 0; i < normalizedAddress.size(); ++i) {
|
||||
if (normalizedAddress[i] == '\\' || normalizedAddress[i] == '/') {
|
||||
normalizedAddress[i] = targetSeparator;
|
||||
}
|
||||
}
|
||||
return normalizedAddress;
|
||||
}
|
||||
//统一地址分隔符
|
||||
static std::string normalizePathStr(const std::string& address, char targetSeparator = '/') {
|
||||
std::string normalizedAddress = address;
|
||||
for (char& ch : normalizedAddress) {
|
||||
if (ch == '\\' || ch == '/') {
|
||||
ch = targetSeparator;
|
||||
}
|
||||
}
|
||||
return normalizedAddress;
|
||||
}
|
||||
static void createDirectoryIfNotExists(const std::string& path) {
|
||||
// 检查路径是否存在
|
||||
if (!std::filesystem::exists(path)) {
|
||||
// 创建路径
|
||||
|
||||
std::filesystem::create_directories(path);
|
||||
//std::cout << "已创建文件夹: " << path << std::endl;
|
||||
}
|
||||
else {/*
|
||||
std::cout << "文件夹已存在: " << path << std::endl;*/
|
||||
}
|
||||
}
|
||||
static bool setFileReadOnly(const std::string& filePath, bool readOnly);
|
||||
};
|
||||
/// <summary>
|
||||
/// 自动删除文件夹,支持按日期删除,按磁盘剩余容量删除,或者两者都是,请在主线程声明qtimer
|
||||
/// </summary>
|
||||
class autoDelete : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum clearMode
|
||||
{
|
||||
dayBefore,
|
||||
sizeOver,
|
||||
sizeOverOrDayBefore,
|
||||
};
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
/// </summary>
|
||||
/// <param name="path">文件夹路径</param>
|
||||
/// <param name="mode">删除几天前的,磁盘剩余容量小于多少,两者都是</param>
|
||||
/// <param name="interval">检测间隔如果只检测日期建议设大一点,如果只检测磁盘容量建议设小一点,默认十分钟</param>
|
||||
autoDelete(QString path,clearMode mode,QTimer *timer)
|
||||
{
|
||||
detPath = path;
|
||||
detMode = mode;
|
||||
connect(timer, &QTimer::timeout, this, [=]() {this->run(); });
|
||||
}
|
||||
~autoDelete()
|
||||
{
|
||||
|
||||
}
|
||||
void run() override
|
||||
{
|
||||
exacute();
|
||||
}
|
||||
void exacute()
|
||||
{
|
||||
switch (detMode)
|
||||
{
|
||||
case dayBefore://删除几天前的
|
||||
fileManager::deleteDirBeforeDays(detPath, daySet);
|
||||
break;
|
||||
case sizeOver://磁盘剩余容量小于多少
|
||||
if (fileManager::getDriveFreeSpaceAsGb(detPath) < sizeSet)
|
||||
fileManager::deleteOldestSonDir(detPath);//删除最老的文件夹
|
||||
break;
|
||||
case sizeOverOrDayBefore://两者都是
|
||||
if (fileManager::getDriveFreeSpaceAsGb(detPath) < sizeSet)//磁盘剩余容量小于多少
|
||||
fileManager::deleteOldestDir(detPath);//删除最老的文件夹
|
||||
fileManager::deleteDirBeforeDays(detPath, daySet);//同时删除几天前的
|
||||
break;
|
||||
default:
|
||||
qDebug() << "none mode det";
|
||||
break;
|
||||
}
|
||||
}
|
||||
void setDay(int day)
|
||||
{
|
||||
daySet = day;
|
||||
}
|
||||
void setSize(int size)
|
||||
{
|
||||
sizeSet = size;
|
||||
}
|
||||
private:
|
||||
QString detPath;
|
||||
clearMode detMode;
|
||||
int daySet = 15;//天
|
||||
int sizeSet = 30;//GB
|
||||
int threadInterval = 0;//ms
|
||||
};
|
||||
|
||||
#pragma once
|
||||
@@ -49,7 +49,7 @@ typedef struct {
|
||||
QString snInfo = "";
|
||||
QString sendNgInfo = ""; // -3 工位上检测到前面几个算法有NG后,做的反馈信息
|
||||
cv::Mat mat;
|
||||
QByteArray byte = "";
|
||||
QByteArray byteArray = "";
|
||||
}dataPack;
|
||||
|
||||
|
||||
|
||||
@@ -21,8 +21,6 @@
|
||||
|
||||
using namespace HalconCpp;
|
||||
|
||||
using namespace std;
|
||||
|
||||
cv::Mat GetOneImages(cv::Mat& oriImg, cv::Mat& oriImg2)
|
||||
{
|
||||
int width = oriImg.cols;
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#using "../../bin/HslCommunication.dll"
|
||||
|
||||
using namespace HslCommunication;
|
||||
using namespace std;
|
||||
using namespace cli;
|
||||
|
||||
class Hd_SocketModule_FinsTcp :public Base
|
||||
@@ -28,7 +27,7 @@ public:
|
||||
bool writeData(std::vector<cv::Mat>& vec_mat, QByteArray& data); // writeData调用PLC的收发,将需要的数据发给寄存器,返回OK/NG
|
||||
bool initParas(QByteArray&);
|
||||
bool run();
|
||||
bool decodeWriteResult(QByteArray byte, QVector<QString>& vec_ret);
|
||||
bool decodeWriteResult(QByteArray byteArray, QVector<QString>& vec_ret);
|
||||
bool checkStatus();
|
||||
private:
|
||||
gcroot<HslCommunication::Profinet::Omron::OmronFinsNet^>* m_pFinsTcpNet = new gcroot<HslCommunication::Profinet::Omron::OmronFinsNet^>;
|
||||
|
||||
+15
-1
@@ -6,6 +6,10 @@ project(handdleai VERSION 0.1.0)
|
||||
string(TIMESTAMP RUN_TIME)
|
||||
message( " project start : " ${RUN_TIME})
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
SET(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
|
||||
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
|
||||
|
||||
@@ -34,7 +38,17 @@ if(NE_DEVELOPER_DEFAULTS)
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/lib")
|
||||
SET(PROJECT_ROOT_PATH ${PROJECT_SOURCE_DIR})
|
||||
endif()
|
||||
|
||||
if (MSVC_VERSION GREATER_EQUAL "1900")
|
||||
include(CheckCXXCompilerFlag)
|
||||
CHECK_CXX_COMPILER_FLAG("/std:c++17" _cpp_latest_flag_supported)
|
||||
if (_cpp_latest_flag_supported)
|
||||
add_compile_options("/std:c++17")
|
||||
else()
|
||||
message(WARNING "Compiler does not support C++17 standard.")
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "MSVC version is not supported.")
|
||||
endif()
|
||||
##################
|
||||
# 获取默认库路径
|
||||
# 记录 // include // lib // 子文件夹名
|
||||
|
||||
@@ -7,7 +7,9 @@ SUBDIRENAMES(OUR_LIBS ${CMAKE_CURRENT_SOURCE_DIR} "" OFF)
|
||||
message("OUR_LIBS :" ${OUR_LIBS})
|
||||
# 遍历子库
|
||||
foreach(dll ${OUR_LIBS})
|
||||
add_subdirectory(${dll})
|
||||
if(EXISTS ${dll}/CMakeLists.txt)
|
||||
add_subdirectory(${dll})
|
||||
endif()
|
||||
endforeach(dll ${})
|
||||
|
||||
|
||||
@@ -44,7 +46,6 @@ foreach(item ${qtlist})
|
||||
list(APPEND lib_list Qt5::${item})
|
||||
endforeach()
|
||||
|
||||
|
||||
FILE(GLOB HEAD_FILES "./*.h" )
|
||||
FILE(GLOB SRC_FILES "./*.cpp")
|
||||
FILE(GLOB UI_FILES "./*.ui")
|
||||
@@ -58,18 +59,23 @@ if(ANDROID)
|
||||
${HEAD_FILES}
|
||||
${SRC_FILES}
|
||||
${UI_FILES}
|
||||
${RLIB_HEAD_FILES}
|
||||
)
|
||||
else()
|
||||
if(CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||
add_executable( ${CURRENT_FOLDER}
|
||||
${HEAD_FILES}
|
||||
${UI_FILES}
|
||||
${SRC_FILES}
|
||||
${UI_FILES})
|
||||
${UI_FILES}
|
||||
${RLIB_HEAD_FILES}
|
||||
)
|
||||
else()
|
||||
add_executable( ${CURRENT_FOLDER}
|
||||
${HEAD_FILES}
|
||||
${SRC_FILES}
|
||||
${UI_FILES})
|
||||
${UI_FILES}
|
||||
${RLIB_HEAD_FILES}
|
||||
)
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#include "qfuture.h"
|
||||
#include "QtConcurrent/qtconcurrent"
|
||||
#include "qmessagebox.h"
|
||||
|
||||
#include <base_Logic.h>
|
||||
|
||||
QMutex log_mutex;
|
||||
void LogMsgOutput(QtMsgType type, const QMessageLogContext& context, const QString& msg)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
//通用逻辑接口
|
||||
#include "base_Logic.h"
|
||||
|
||||
#include <qobject.h>
|
||||
//无法用信号槽传递图像?
|
||||
//返回图片的结构体
|
||||
struct showImgStruct
|
||||
@@ -19,7 +19,6 @@ typedef void (*ReleaseFunction)(base_Logic* animal);
|
||||
class Logic_transfer : public base_Logic
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Logic_transfer();
|
||||
~Logic_transfer();
|
||||
|
||||
@@ -760,7 +760,7 @@ bool QtCameraDebug::initCamera(int cameraIndex)
|
||||
}
|
||||
|
||||
|
||||
bool QtCameraDebug::setData(int cameraIndex, const vector<cv::Mat>& ImgS, const QStringList& data)
|
||||
bool QtCameraDebug::setData(int cameraIndex, const std::vector<cv::Mat>& ImgS, const QStringList& data)
|
||||
{
|
||||
if (queue_MyPbGlobalObject.size() <= cameraIndex + 1)
|
||||
return false;
|
||||
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
bool initCamera(int cameraIndex);
|
||||
//4、设置
|
||||
//参数:相机序号、图像参数(不使用)、设置的相机参数
|
||||
bool setData(int cameraIndex, const vector<cv::Mat>&, const QStringList&);
|
||||
bool setData(int cameraIndex, const std::vector<cv::Mat>&, const QStringList&);
|
||||
//5、获取数据
|
||||
//参数:相机序号、获取的图像、获取的数据(实际无)
|
||||
bool data(int cameraIndex, std::vector<cv::Mat>&, QStringList&);
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
////OPT
|
||||
//#include "OPTApi.h" //OPT和海康有部分名称一样,OPT时使用海康
|
||||
//#pragma comment(lib,"./OPTSDK.lib")
|
||||
using namespace std;
|
||||
QtDefectSet::QtDefectSet(QMainWindow*parent)
|
||||
: QMainWindow(parent)
|
||||
{
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <Windows.h>
|
||||
#include <process.h>
|
||||
#include <time.h>
|
||||
#include "QHeaderView.h"
|
||||
|
||||
@@ -1716,9 +1716,9 @@ void Qt_epWindow::showDefectData()
|
||||
|
||||
QStringList offLineCameraKeyS;
|
||||
|
||||
void Qt_epWindow::getTransferData(QString key, QString cameraName, QString snInfo, QByteArray byte)
|
||||
void Qt_epWindow::getTransferData(QString key, QString cameraName, QString snInfo, QByteArray byteArray)
|
||||
{
|
||||
QString myByte = byte;
|
||||
QString myByte = byteArray;
|
||||
//ui.plainTextEdit->appendPlainText("key: " + key + " cameraName:" + cameraName + " snInfo:" + snInfo + " myByte:" + myByte + " sendNgInfo:" + sendNgInfo);
|
||||
//qApp->processEvents();
|
||||
|
||||
@@ -2070,7 +2070,7 @@ void Qt_epWindow::getTransferData(QString key, QString cameraName, QString snInf
|
||||
{
|
||||
QString mycameraKey_cName_index = cameraKey_cName_surface[i][j];
|
||||
QString mykey_index = mycameraKey_cName_index.split("#")[0] + "_" + mycameraKey_cName_index.split("#")[1].split("_")[1];
|
||||
if (cameraName == mykey_index && !byte.contains("1"))//匹配结果,1OK,2NG
|
||||
if (cameraName == mykey_index && !byteArray.contains("1"))//匹配结果,1OK,2NG
|
||||
{
|
||||
/*QTableWidgetItem* m_Item2 = new QTableWidgetItem;
|
||||
m_Item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
//struct LogListStruct
|
||||
//{
|
||||
// QString key, QString cameraName, QString snInfo, QByteArray byte
|
||||
// QString key, QString cameraName, QString snInfo, QByteArray byteArray
|
||||
//};
|
||||
|
||||
struct QPieSeriesData
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#ifndef __base_Logic_H__
|
||||
#ifndef __base_Logic_H__
|
||||
#define __base_Logic_H__
|
||||
|
||||
#include <iostream>
|
||||
@@ -56,8 +56,8 @@ public:
|
||||
virtual bool sendPLC(QString cmd) { return true; }
|
||||
virtual bool reLoadJsonSetParameter(QStringList moduleKeyList) { return true; }
|
||||
signals:
|
||||
virtual void Logic_sendTcpStatus(bool);
|
||||
virtual void Logic_writeData(QString, QString, QString, QByteArray);
|
||||
virtual void Logic_sendTcpStatus(bool) ;
|
||||
virtual void Logic_writeData(QString, QString, QString, QByteArray) ;
|
||||
virtual void Logic_cameraDisconnect(QString msg, bool status);
|
||||
virtual void Logic_CommunicationDisconnect(QString msg, bool status);
|
||||
private slots:
|
||||
|
||||
@@ -0,0 +1,222 @@
|
||||
/****************************************************************************
|
||||
** Meta object code from reading C++ file 'base_Logic.h'
|
||||
**
|
||||
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.14.2)
|
||||
**
|
||||
** WARNING! All changes made in this file will be lost!
|
||||
*****************************************************************************/
|
||||
|
||||
#include <memory>
|
||||
#include "base_Logic.h"
|
||||
#include <QtCore/qbytearray.h>
|
||||
#include <QtCore/qmetatype.h>
|
||||
#if !defined(Q_MOC_OUTPUT_REVISION)
|
||||
#error "The header file 'base_Logic.h' doesn't include <QObject>."
|
||||
#elif Q_MOC_OUTPUT_REVISION != 67
|
||||
#error "This file was generated using the moc from 5.14.2. It"
|
||||
#error "cannot be used with the include files from this version of Qt."
|
||||
#error "(The moc has changed too much.)"
|
||||
#endif
|
||||
|
||||
QT_BEGIN_MOC_NAMESPACE
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_DEPRECATED
|
||||
struct qt_meta_stringdata_base_Logic_t {
|
||||
QByteArrayData data[14];
|
||||
char stringdata0[255];
|
||||
};
|
||||
#define QT_MOC_LITERAL(idx, ofs, len) \
|
||||
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
|
||||
qptrdiff(offsetof(qt_meta_stringdata_base_Logic_t, stringdata0) + ofs \
|
||||
- idx * sizeof(QByteArrayData)) \
|
||||
)
|
||||
static const qt_meta_stringdata_base_Logic_t qt_meta_stringdata_base_Logic = {
|
||||
{
|
||||
QT_MOC_LITERAL(0, 0, 10), // "base_Logic"
|
||||
QT_MOC_LITERAL(1, 11, 19), // "Logic_sendTcpStatus"
|
||||
QT_MOC_LITERAL(2, 31, 0), // ""
|
||||
QT_MOC_LITERAL(3, 32, 15), // "Logic_writeData"
|
||||
QT_MOC_LITERAL(4, 48, 22), // "Logic_cameraDisconnect"
|
||||
QT_MOC_LITERAL(5, 71, 3), // "msg"
|
||||
QT_MOC_LITERAL(6, 75, 6), // "status"
|
||||
QT_MOC_LITERAL(7, 82, 29), // "Logic_CommunicationDisconnect"
|
||||
QT_MOC_LITERAL(8, 112, 21), // "processtask_sendImage"
|
||||
QT_MOC_LITERAL(9, 134, 7), // "cv::Mat"
|
||||
QT_MOC_LITERAL(10, 142, 25), // "processtask_sendTcpStatus"
|
||||
QT_MOC_LITERAL(11, 168, 21), // "processtask_writeData"
|
||||
QT_MOC_LITERAL(12, 190, 28), // "processtask_cameraDisconnect"
|
||||
QT_MOC_LITERAL(13, 219, 35) // "processtask_CommunicationDisc..."
|
||||
|
||||
},
|
||||
"base_Logic\0Logic_sendTcpStatus\0\0"
|
||||
"Logic_writeData\0Logic_cameraDisconnect\0"
|
||||
"msg\0status\0Logic_CommunicationDisconnect\0"
|
||||
"processtask_sendImage\0cv::Mat\0"
|
||||
"processtask_sendTcpStatus\0"
|
||||
"processtask_writeData\0"
|
||||
"processtask_cameraDisconnect\0"
|
||||
"processtask_CommunicationDisconnect"
|
||||
};
|
||||
#undef QT_MOC_LITERAL
|
||||
|
||||
static const uint qt_meta_data_base_Logic[] = {
|
||||
|
||||
// content:
|
||||
8, // revision
|
||||
0, // classname
|
||||
0, 0, // classinfo
|
||||
9, 14, // methods
|
||||
0, 0, // properties
|
||||
0, 0, // enums/sets
|
||||
0, 0, // constructors
|
||||
0, // flags
|
||||
4, // signalCount
|
||||
|
||||
// signals: name, argc, parameters, tag, flags
|
||||
1, 1, 59, 2, 0x06 /* Public */,
|
||||
3, 4, 62, 2, 0x06 /* Public */,
|
||||
4, 2, 71, 2, 0x06 /* Public */,
|
||||
7, 2, 76, 2, 0x06 /* Public */,
|
||||
|
||||
// slots: name, argc, parameters, tag, flags
|
||||
8, 2, 81, 2, 0x08 /* Private */,
|
||||
10, 1, 86, 2, 0x08 /* Private */,
|
||||
11, 4, 89, 2, 0x08 /* Private */,
|
||||
12, 2, 98, 2, 0x08 /* Private */,
|
||||
13, 2, 103, 2, 0x08 /* Private */,
|
||||
|
||||
// signals: parameters
|
||||
QMetaType::Void, QMetaType::Bool, 2,
|
||||
QMetaType::Void, QMetaType::QString, QMetaType::QString, QMetaType::QString, QMetaType::QByteArray, 2, 2, 2, 2,
|
||||
QMetaType::Void, QMetaType::QString, QMetaType::Bool, 5, 6,
|
||||
QMetaType::Void, QMetaType::QString, QMetaType::Bool, 5, 6,
|
||||
|
||||
// slots: parameters
|
||||
QMetaType::Void, QMetaType::QString, 0x80000000 | 9, 2, 2,
|
||||
QMetaType::Void, QMetaType::Bool, 2,
|
||||
QMetaType::Void, QMetaType::QString, QMetaType::QString, QMetaType::QString, QMetaType::QByteArray, 2, 2, 2, 2,
|
||||
QMetaType::Void, QMetaType::QString, QMetaType::Bool, 5, 6,
|
||||
QMetaType::Void, QMetaType::QString, QMetaType::Bool, 5, 6,
|
||||
|
||||
0 // eod
|
||||
};
|
||||
|
||||
void base_Logic::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
|
||||
{
|
||||
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||
auto *_t = static_cast<base_Logic *>(_o);
|
||||
Q_UNUSED(_t)
|
||||
switch (_id) {
|
||||
case 0: _t->Logic_sendTcpStatus((*reinterpret_cast< bool(*)>(_a[1]))); break;
|
||||
case 1: _t->Logic_writeData((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2])),(*reinterpret_cast< QString(*)>(_a[3])),(*reinterpret_cast< QByteArray(*)>(_a[4]))); break;
|
||||
case 2: _t->Logic_cameraDisconnect((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break;
|
||||
case 3: _t->Logic_CommunicationDisconnect((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break;
|
||||
case 4: _t->processtask_sendImage((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< cv::Mat(*)>(_a[2]))); break;
|
||||
case 5: _t->processtask_sendTcpStatus((*reinterpret_cast< bool(*)>(_a[1]))); break;
|
||||
case 6: _t->processtask_writeData((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2])),(*reinterpret_cast< QString(*)>(_a[3])),(*reinterpret_cast< QByteArray(*)>(_a[4]))); break;
|
||||
case 7: _t->processtask_cameraDisconnect((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break;
|
||||
case 8: _t->processtask_CommunicationDisconnect((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break;
|
||||
default: ;
|
||||
}
|
||||
} else if (_c == QMetaObject::IndexOfMethod) {
|
||||
int *result = reinterpret_cast<int *>(_a[0]);
|
||||
{
|
||||
using _t = void (base_Logic::*)(bool );
|
||||
if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&base_Logic::Logic_sendTcpStatus)) {
|
||||
*result = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
{
|
||||
using _t = void (base_Logic::*)(QString , QString , QString , QByteArray );
|
||||
if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&base_Logic::Logic_writeData)) {
|
||||
*result = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
{
|
||||
using _t = void (base_Logic::*)(QString , bool );
|
||||
if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&base_Logic::Logic_cameraDisconnect)) {
|
||||
*result = 2;
|
||||
return;
|
||||
}
|
||||
}
|
||||
{
|
||||
using _t = void (base_Logic::*)(QString , bool );
|
||||
if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&base_Logic::Logic_CommunicationDisconnect)) {
|
||||
*result = 3;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QT_INIT_METAOBJECT const QMetaObject base_Logic::staticMetaObject = { {
|
||||
QMetaObject::SuperData::link<QObject::staticMetaObject>(),
|
||||
qt_meta_stringdata_base_Logic.data,
|
||||
qt_meta_data_base_Logic,
|
||||
qt_static_metacall,
|
||||
nullptr,
|
||||
nullptr
|
||||
} };
|
||||
|
||||
|
||||
const QMetaObject *base_Logic::metaObject() const
|
||||
{
|
||||
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
|
||||
}
|
||||
|
||||
void *base_Logic::qt_metacast(const char *_clname)
|
||||
{
|
||||
if (!_clname) return nullptr;
|
||||
if (!strcmp(_clname, qt_meta_stringdata_base_Logic.stringdata0))
|
||||
return static_cast<void*>(this);
|
||||
return QObject::qt_metacast(_clname);
|
||||
}
|
||||
|
||||
int base_Logic::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||
{
|
||||
_id = QObject::qt_metacall(_c, _id, _a);
|
||||
if (_id < 0)
|
||||
return _id;
|
||||
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||
if (_id < 9)
|
||||
qt_static_metacall(this, _c, _id, _a);
|
||||
_id -= 9;
|
||||
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
||||
if (_id < 9)
|
||||
*reinterpret_cast<int*>(_a[0]) = -1;
|
||||
_id -= 9;
|
||||
}
|
||||
return _id;
|
||||
}
|
||||
|
||||
// SIGNAL 0
|
||||
void base_Logic::Logic_sendTcpStatus(bool _t1)
|
||||
{
|
||||
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))) };
|
||||
QMetaObject::activate(this, &staticMetaObject, 0, _a);
|
||||
}
|
||||
|
||||
// SIGNAL 1
|
||||
void base_Logic::Logic_writeData(QString _t1, QString _t2, QString _t3, QByteArray _t4)
|
||||
{
|
||||
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t2))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t3))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t4))) };
|
||||
QMetaObject::activate(this, &staticMetaObject, 1, _a);
|
||||
}
|
||||
|
||||
// SIGNAL 2
|
||||
void base_Logic::Logic_cameraDisconnect(QString _t1, bool _t2)
|
||||
{
|
||||
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t2))) };
|
||||
QMetaObject::activate(this, &staticMetaObject, 2, _a);
|
||||
}
|
||||
|
||||
// SIGNAL 3
|
||||
void base_Logic::Logic_CommunicationDisconnect(QString _t1, bool _t2)
|
||||
{
|
||||
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t2))) };
|
||||
QMetaObject::activate(this, &staticMetaObject, 3, _a);
|
||||
}
|
||||
QT_WARNING_POP
|
||||
QT_END_MOC_NAMESPACE
|
||||
@@ -486,12 +486,12 @@ bool Hd_AI_empty_module::writeData(std::vector<cv::Mat>& vec_mat, QByteArray &da
|
||||
|
||||
//传入initParas函数,格式为:相机key+参数名1#参数值1#参数值2+参数名2#参数值1...
|
||||
//初始化
|
||||
bool Hd_AI_empty_module::initParas(QByteArray& byte)
|
||||
bool Hd_AI_empty_module::initParas(QByteArray& byteArray)
|
||||
{
|
||||
QByteArrayList valueList = byte.split('+');
|
||||
QByteArrayList valueList = byteArray.split('+');
|
||||
QStringList valueiList;
|
||||
|
||||
if (byte.contains("onlySetParameter"))
|
||||
if (byteArray.contains("onlySetParameter"))
|
||||
{
|
||||
qDebug() << __FUNCTION__ << " line:" << __LINE__ << "onlySetParameter,valueList[0]:" << valueList[0];
|
||||
if (valueList.size() > 1)
|
||||
@@ -543,37 +543,37 @@ bool Hd_AI_empty_module::initParas(QByteArray& byte)
|
||||
return true;
|
||||
}
|
||||
// 解码
|
||||
bool Hd_AI_empty_module::decodeAiValue(QByteArray byte,QVector<QByteArray> &vec_ret)
|
||||
bool Hd_AI_empty_module::decodeAiValue(QByteArray byteArray,QVector<QByteArray> &vec_ret)
|
||||
{
|
||||
if(byte.isEmpty())
|
||||
if(byteArray.isEmpty())
|
||||
{
|
||||
qCritical() << "[Error] " << " byte is null!";
|
||||
qCritical() << "[Error] " << " byteArray is null!";
|
||||
return false;
|
||||
}
|
||||
|
||||
/*******************************************/
|
||||
byte.remove(0,8);
|
||||
QByteArray mm_data = byte.mid(0,4);
|
||||
byteArray.remove(0,8);
|
||||
QByteArray mm_data = byteArray.mid(0,4);
|
||||
memcpy((void*)¶mNum,(void*)mm_data.data(), 4);
|
||||
qDebug() << "[INFO] " << " paramNum:" << paramNum;
|
||||
byte.remove(0,4);
|
||||
byteArray.remove(0,4);
|
||||
/*******************************************/
|
||||
|
||||
while (!byte.isEmpty())
|
||||
while (!byteArray.isEmpty())
|
||||
{
|
||||
int type = 0;
|
||||
QByteArray m_type = byte.mid(0,4);
|
||||
QByteArray m_type = byteArray.mid(0,4);
|
||||
memcpy((void*)&type,(void*)m_type.data(), 4);
|
||||
byte.remove(0,4);
|
||||
byteArray.remove(0,4);
|
||||
|
||||
int len = 0;
|
||||
QByteArray m_len = byte.mid(0,4);
|
||||
QByteArray m_len = byteArray.mid(0,4);
|
||||
memcpy((void*)&len,(void*)m_len.data(), 4);
|
||||
byte.remove(0,4);
|
||||
byteArray.remove(0,4);
|
||||
|
||||
QByteArray mm_data = byte.mid(0,len);
|
||||
QByteArray mm_data = byteArray.mid(0,len);
|
||||
vec_ret.append(mm_data);
|
||||
byte.remove(0,len);
|
||||
byteArray.remove(0,len);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -388,16 +388,16 @@ bool Hd_AI_seg_module::writeData(std::vector<cv::Mat>& vec_mat, QByteArray &data
|
||||
return true;
|
||||
}
|
||||
//初始化
|
||||
bool Hd_AI_seg_module::initParas(QByteArray& byte)
|
||||
bool Hd_AI_seg_module::initParas(QByteArray& byteArray)
|
||||
{
|
||||
//if(byte.isEmpty())
|
||||
//if(byteArray.isEmpty())
|
||||
//{
|
||||
// qCritical() << "[Error] " << " byte is null!";
|
||||
// qCritical() << "[Error] " << " byteArray is null!";
|
||||
// return false;
|
||||
//}
|
||||
//QVector<QByteArray> vec_ret;
|
||||
|
||||
//decodeAiValue(byte,vec_ret);
|
||||
//decodeAiValue(byteArray,vec_ret);
|
||||
//if(vec_ret.isEmpty())
|
||||
//{
|
||||
// qCritical() << "[Error] " << " vec_ret is null!";
|
||||
@@ -451,37 +451,37 @@ bool Hd_AI_seg_module::initParas(QByteArray& byte)
|
||||
return true;
|
||||
}
|
||||
// 解码
|
||||
bool Hd_AI_seg_module::decodeAiValue(QByteArray byte,QVector<QByteArray> &vec_ret)
|
||||
bool Hd_AI_seg_module::decodeAiValue(QByteArray byteArray,QVector<QByteArray> &vec_ret)
|
||||
{
|
||||
if(byte.isEmpty())
|
||||
if(byteArray.isEmpty())
|
||||
{
|
||||
qCritical() << "[Error] " << " byte is null!";
|
||||
qCritical() << "[Error] " << " byteArray is null!";
|
||||
return false;
|
||||
}
|
||||
|
||||
/*******************************************/
|
||||
byte.remove(0,8);
|
||||
QByteArray mm_data = byte.mid(0,4);
|
||||
byteArray.remove(0,8);
|
||||
QByteArray mm_data = byteArray.mid(0,4);
|
||||
memcpy((void*)¶mNum,(void*)mm_data.data(), 4);
|
||||
qDebug() << "[INFO] " << " paramNum:" << paramNum;
|
||||
byte.remove(0,4);
|
||||
byteArray.remove(0,4);
|
||||
/*******************************************/
|
||||
|
||||
while (!byte.isEmpty())
|
||||
while (!byteArray.isEmpty())
|
||||
{
|
||||
int type = 0;
|
||||
QByteArray m_type = byte.mid(0,4);
|
||||
QByteArray m_type = byteArray.mid(0,4);
|
||||
memcpy((void*)&type,(void*)m_type.data(), 4);
|
||||
byte.remove(0,4);
|
||||
byteArray.remove(0,4);
|
||||
|
||||
int len = 0;
|
||||
QByteArray m_len = byte.mid(0,4);
|
||||
QByteArray m_len = byteArray.mid(0,4);
|
||||
memcpy((void*)&len,(void*)m_len.data(), 4);
|
||||
byte.remove(0,4);
|
||||
byteArray.remove(0,4);
|
||||
|
||||
QByteArray mm_data = byte.mid(0,len);
|
||||
QByteArray mm_data = byteArray.mid(0,len);
|
||||
vec_ret.append(mm_data);
|
||||
byte.remove(0,len);
|
||||
byteArray.remove(0,len);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
bool checkStatus();// { return true; };
|
||||
|
||||
bool encodeResultValue(QVector<std::string> append_value,QByteArray &resultByte);
|
||||
bool decodeAiValue(QByteArray byte,QVector<QByteArray> &vec_ret);
|
||||
bool decodeAiValue(QByteArray byteArray,QVector<QByteArray> &vec_ret);
|
||||
//---------检测流程,根据实际项目修改---------
|
||||
bool AIdetect(cv::Mat img2D, QString saveKey, QString Dir2D, QString SN, QString DataTime);
|
||||
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
#ifndef PBGLOBALOBJECT_H
|
||||
#ifndef PBGLOBALOBJECT_H
|
||||
#define PBGLOBALOBJECT_H
|
||||
|
||||
#include <QObject>
|
||||
#include<opencv2/opencv.hpp>
|
||||
#include <opencv.hpp>
|
||||
|
||||
using namespace std;
|
||||
|
||||
//type对应的相机、触发方式
|
||||
#define HIK_Hard 0 //海康
|
||||
@@ -39,7 +38,7 @@ public:
|
||||
|
||||
virtual QMap<QString,QString> parameters() = 0;
|
||||
virtual bool init() { return true; }
|
||||
virtual bool setData(const vector<cv::Mat> &, const QStringList &) { return true; }
|
||||
virtual bool setData(const std::vector<cv::Mat> &, const QStringList &) { return true; }
|
||||
virtual bool data(std::vector<cv::Mat> &, QStringList &) { return true; }
|
||||
public:
|
||||
//大类
|
||||
|
||||
+20
-20
@@ -164,8 +164,8 @@ Logic_transfer::Logic_transfer()
|
||||
{
|
||||
showMutex = new QMutex;
|
||||
ifRuntransfer = true;
|
||||
//通用逻辑接口
|
||||
//加载逻辑dll
|
||||
//ͨ�����ӿ�
|
||||
//������dll
|
||||
QLibrary* m_lib = new QLibrary("Hd_LogicDll_module.dll");
|
||||
bool flag = m_lib->load();
|
||||
if (!m_lib->isLoaded())
|
||||
@@ -185,20 +185,20 @@ Logic_transfer::Logic_transfer()
|
||||
Logic_ptr = createFun();
|
||||
destory_Logic = releaseFun;
|
||||
|
||||
//加载并检查配置文件:bin/camera_cfg.json
|
||||
//���ز���������ļ���bin/camera_cfg.json
|
||||
//m_jsonObj =load_camera_cfg();
|
||||
//check_cmeraCfg();
|
||||
//Logic_ptr->setJsonObject(m_jsonObj);
|
||||
//信号与槽
|
||||
//����
|
||||
if(Logic_ptr) {
|
||||
//connect(Logic_ptr, SIGNAL(Logic_sendImage(QString, cv::Mat)), this, SLOT(base_Logic_sendImage(QString, cv::Mat))); // 传递图片
|
||||
connect(Logic_ptr, SIGNAL(Logic_writeData(QString, QString, QString, QByteArray, QString)), this, SLOT(base_Logic_writeData(QString, QString, QString, QByteArray, QString)));// 传递数据
|
||||
//connect(Logic_ptr, SIGNAL(Logic_sendImage(QString, cv::Mat)), this, SLOT(base_Logic_sendImage(QString, cv::Mat))); // ����ͼƬ
|
||||
connect(Logic_ptr, SIGNAL(Logic_writeData(QString, QString, QString, QByteArray, QString)), this, SLOT(base_Logic_writeData(QString, QString, QString, QByteArray, QString)));// ��������
|
||||
QFuture<void>muf = QtConcurrent::run(this, &Logic_transfer::check_sendImgStruct);
|
||||
}
|
||||
}
|
||||
}
|
||||
Sleep(50);
|
||||
//自动写Log日志功能;bin/Log
|
||||
//�Զ�дLog��־���ܣ�bin/Log
|
||||
qInstallMessageHandler(LogMsgOutput);
|
||||
}
|
||||
|
||||
@@ -210,12 +210,12 @@ void Logic_transfer::check_sendImgStruct()
|
||||
//if (Logic_ptr->queue_sendImgStruct.size() > 0)
|
||||
if (Logic_ptr->get_sendImgStruct(myS))
|
||||
{
|
||||
//QMutexLocker locker(sendImgStructMutex); // 加锁
|
||||
//QMutexLocker locker(sendImgStructMutex); // ����
|
||||
//sendImgStruct mS;
|
||||
//mS.send_Mat = myL.send_Mat;
|
||||
//mS.cameraKey_index = myL.cameraKey_index;
|
||||
|
||||
////堆积了,只显示最新的
|
||||
////�ѻ��ˣ�ֻ��ʾ���µ�
|
||||
//for (int i = 0; i < queue_sendImgStruct.size(); i++)
|
||||
// if (myL.cameraKey_index == queue_sendImgStruct[i].cameraKey_index)
|
||||
// {
|
||||
@@ -235,7 +235,7 @@ void Logic_transfer::check_sendImgStruct()
|
||||
}
|
||||
bool Logic_transfer::getShowQImage(QQueue< showImgStruct>& my_showImgStruct)
|
||||
{
|
||||
QMutexLocker locker(showMutex); // 加锁
|
||||
QMutexLocker locker(showMutex); // ����
|
||||
//showImgStruct mS;
|
||||
if (queue_showImgStruct.size() > 0)
|
||||
{
|
||||
@@ -251,24 +251,24 @@ void Logic_transfer::base_Logic_sendImage(QString key, cv::Mat mtx)
|
||||
try
|
||||
{
|
||||
if (!mtx.empty()) {
|
||||
if ((mtx.dataend - mtx.datastart) != mtx.cols * mtx.rows * mtx.channels()) //尝试能否解决mtx内容异常问题
|
||||
if ((mtx.dataend - mtx.datastart) != mtx.cols * mtx.rows * mtx.channels()) //�����ܷ���mtx�����쳣����
|
||||
{
|
||||
qCritical() << __FUNCTION__ << " line:" << __LINE__ << " mtx.dataend - mtx.datastart err!!:";
|
||||
qCritical() << __FUNCTION__ << " line:" << __LINE__ << " mtx.dataend - mtx.datastart err����:";
|
||||
return;// false;
|
||||
}
|
||||
|
||||
cv::Mat rgb;
|
||||
//while (mtx.cols > 2000 || mtx.rows > 2000)
|
||||
// cv::resize(mtx, mtx, cv::Size(), 0.1, 0.1); //吃cpu性能,i7 8700,4800*4800的resize耗时100ms;QImage*的scaled缩放,耗时200ms
|
||||
// cv::resize(mtx, mtx, cv::Size(), 0.1, 0.1); //��cpu���ܣ�i7 8700��4800*4800��resize��ʱ100ms��QImage*��scaled���ţ���ʱ200ms
|
||||
QImage* itemImage = nullptr;
|
||||
if (mtx.type() == CV_8UC1)
|
||||
{
|
||||
rgb = mtx.clone(); //mtx.data检查后,只有2个数据,clone崩溃
|
||||
rgb = mtx.clone(); //mtx.data����ֻ��2�����ݣ�clone����
|
||||
itemImage = new QImage(QSize(rgb.cols, rgb.rows), QImage::Format_Grayscale8);
|
||||
QImage qim((const unsigned char*)rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_Grayscale8);
|
||||
*itemImage = qim.copy();
|
||||
}
|
||||
else if (mtx.type() == CV_16U) // 双通道转单通道显示
|
||||
else if (mtx.type() == CV_16U) // ˫ͨ��ת��ͨ����ʾ
|
||||
{
|
||||
cv::normalize(mtx, mtx, 0, 255, cv::NORM_MINMAX);
|
||||
cv::convertScaleAbs(mtx, rgb);
|
||||
@@ -292,12 +292,12 @@ void Logic_transfer::base_Logic_sendImage(QString key, cv::Mat mtx)
|
||||
}
|
||||
//emit LogicTransfer_sendImage(key, itemImage);
|
||||
|
||||
QMutexLocker locker(showMutex); // 加锁
|
||||
QMutexLocker locker(showMutex); // ����
|
||||
showImgStruct mS;
|
||||
mS.show_QImage = itemImage;
|
||||
mS.cameraKey_index = key;
|
||||
|
||||
////堆积了,只显示最新的
|
||||
////�ѻ��ˣ�ֻ��ʾ���µ�
|
||||
//for (int i = 0; i < queue_showImgStruct.size(); i++)
|
||||
// if (key == queue_showImgStruct[i].cameraKey_index)
|
||||
// {
|
||||
@@ -321,7 +321,7 @@ Logic_transfer::~Logic_transfer()
|
||||
ifRuntransfer = false;
|
||||
Sleep(100);
|
||||
|
||||
//通用逻辑接口
|
||||
//ͨ�����ӿ�
|
||||
destory_Logic(Logic_ptr);
|
||||
}
|
||||
|
||||
@@ -330,9 +330,9 @@ void Logic_transfer::base_Logic_sendTcpStatus(bool flag)
|
||||
{
|
||||
emit LogicTransfer_sendTcpStatus(flag);
|
||||
}
|
||||
void Logic_transfer::base_Logic_writeData(QString key, QString cameraName, QString snInfo, QByteArray byte, QString sendNgInfo)
|
||||
void Logic_transfer::base_Logic_writeData(QString key, QString cameraName, QString snInfo, QByteArray byteArray, QString sendNgInfo)
|
||||
{
|
||||
emit LogicTransfer_writeData(key, cameraName, snInfo, byte, sendNgInfo);
|
||||
emit LogicTransfer_writeData(key, cameraName, snInfo, byteArray, sendNgInfo);
|
||||
}
|
||||
void Logic_transfer::base_Logic_cameraDisconnect(QString msg, bool status)
|
||||
{
|
||||
|
||||
Vendored
+9
-9
@@ -1,13 +1,13 @@
|
||||
#pragma once
|
||||
//通用逻辑接口
|
||||
//ͨ�����ӿ�
|
||||
#include "base_Logic.h"
|
||||
|
||||
//无法用信号槽传递图像?
|
||||
//返回图片的结构体
|
||||
//�����źŲ۴���ͼ��
|
||||
//����ͼƬ�Ľṹ��
|
||||
struct showImgStruct
|
||||
{
|
||||
QImage* show_QImage; //返回的图像
|
||||
QString cameraKey_index; //关键字_序号
|
||||
QImage* show_QImage; //���ص�ͼ��
|
||||
QString cameraKey_index; //�ؼ���_���
|
||||
};
|
||||
|
||||
typedef base_Logic* (*CreateFunction)();
|
||||
@@ -77,7 +77,7 @@ public:
|
||||
QMutex* showMutex;
|
||||
QQueue< showImgStruct> queue_showImgStruct;
|
||||
bool getShowQImage(QQueue< showImgStruct>&);
|
||||
//内部使用
|
||||
//�ڲ�ʹ��
|
||||
private:
|
||||
|
||||
QString currPath;
|
||||
@@ -85,11 +85,11 @@ private:
|
||||
QJsonObject m_jsonObj;
|
||||
|
||||
base_Logic* Logic_ptr;
|
||||
ReleaseFunction destory_Logic = nullptr; //释放
|
||||
ReleaseFunction destory_Logic = nullptr; //�ͷ�
|
||||
|
||||
void check_sendImgStruct();
|
||||
|
||||
//对外接口
|
||||
//����ӿ�
|
||||
signals:
|
||||
void LogicTransfer_sendImage(QString, QImage*);
|
||||
void LogicTransfer_sendTcpStatus(bool);
|
||||
@@ -99,7 +99,7 @@ signals:
|
||||
private slots:
|
||||
void base_Logic_sendImage(QString key, cv::Mat mtx);
|
||||
void base_Logic_sendTcpStatus(bool flag);
|
||||
void base_Logic_writeData(QString key, QString cameraName, QString snInfo, QByteArray byte, QString sendNgInfo);
|
||||
void base_Logic_writeData(QString key, QString cameraName, QString snInfo, QByteArray byteArray, QString sendNgInfo);
|
||||
void base_Logic_cameraDisconnect(QString msg, bool status);
|
||||
void base_Logic_CommunicationDisconnect(QString msg, bool status);
|
||||
};
|
||||
|
||||
Vendored
-1
@@ -19,7 +19,6 @@
|
||||
#include <QJsonParseError>
|
||||
#include "qimage.h"
|
||||
#include<qtimer.h>
|
||||
#include <Windows.h>
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <opencv2/core.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
|
||||
Vendored
-1
@@ -10,7 +10,6 @@
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <windows.h>
|
||||
#include <stdlib.h>
|
||||
using namespace std;
|
||||
using namespace cv;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user