添加 初始化失败的重试功能
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#include "hd_mvcamera_module.h"
|
||||
std::mutex moduleMutex;//掉线锁
|
||||
|
||||
unsigned int nRet;
|
||||
QByteArray MV_CC_DeviceInfoListToQByteArray(const MV_CC_DEVICE_INFO_LIST& deviceInfoList) {
|
||||
QByteArray byteArray;
|
||||
byteArray.resize(sizeof(MV_CC_DEVICE_INFO_LIST));
|
||||
@@ -235,7 +235,7 @@ bool Hd_MvCamera_module::sendData(std::vector<cv::Mat>& mat, QByteArray& data)
|
||||
{
|
||||
|
||||
QString inputString = QString::fromUtf8(data);
|
||||
if (data == "connect")
|
||||
if (data == "getStatus")
|
||||
{
|
||||
data = mv_Status;
|
||||
return true;
|
||||
@@ -292,12 +292,16 @@ bool Hd_MvCamera_module::initParas(QByteArray&)
|
||||
MV_CC_StopGrabbing(handle);
|
||||
MV_CC_CloseDevice(handle);
|
||||
MV_CC_DestroyHandle(handle);
|
||||
return false;
|
||||
//return false;
|
||||
}
|
||||
|
||||
//打开相机
|
||||
unsigned int nRet = MV_CC_CreateHandle(&handle, m_stDevList.pDeviceInfo[index]);
|
||||
nRet = MV_CC_CreateHandle(&handle, m_stDevList.pDeviceInfo[index]);
|
||||
if (nRet != 0)
|
||||
mv_Status = u8"句柄创建失败MV_CC_CreateHandle"+ QByteArray::number(nRet, 16).toUpper();
|
||||
nRet = MV_CC_OpenDevice(handle);
|
||||
if (nRet != 0)
|
||||
mv_Status = u8"打开设备失败MV_CC_OpenDevice"+ QByteArray::number(nRet, 16).toUpper();
|
||||
////触发模式
|
||||
nRet = MV_CC_SetEnumValue(handle, "TriggerSource", MV_TRIGGER_SOURCE_SOFTWARE);
|
||||
nRet = MV_CC_SetEnumValue(handle, "TriggerMode", MV_TRIGGER_MODE_ON);
|
||||
|
||||
Binary file not shown.
@@ -108,21 +108,22 @@ QString Hd_SocketModule_ModbusTcp::ShortToHex(int value)
|
||||
Hd_SocketModule_ModbusTcp::Hd_SocketModule_ModbusTcp()
|
||||
{
|
||||
m_Mutex = new QMutex;
|
||||
m_Thread = new MyThread(this);
|
||||
m_Thread->setMutexLock(m_Mutex);
|
||||
//m_Thread = new MyThread(this);
|
||||
m_Thread.setMutexLock(m_Mutex);
|
||||
}
|
||||
|
||||
Hd_SocketModule_ModbusTcp::~Hd_SocketModule_ModbusTcp()
|
||||
{
|
||||
m_Thread->setRunStop();
|
||||
m_Thread->wait();
|
||||
m_Thread->quit();
|
||||
if (m_Thread)
|
||||
{
|
||||
qDebug() << "[INFO] "<< "~m_Thread()";
|
||||
delete m_Thread;
|
||||
m_Thread = nullptr;
|
||||
}
|
||||
m_Thread.setRunStop();
|
||||
m_Thread.wait();
|
||||
m_Thread.quit();
|
||||
m_Thread.terminate();
|
||||
//if (m_Thread)
|
||||
//{
|
||||
// qDebug() << "[INFO] "<< "~m_Thread()";
|
||||
// delete m_Thread;
|
||||
// m_Thread = nullptr;
|
||||
//}
|
||||
|
||||
qDebug() << "[INFO] " << "~Hd_SocketModule_ModbusTcp success!";
|
||||
}
|
||||
@@ -395,8 +396,8 @@ bool Hd_SocketModule_ModbusTcp::initParas(QByteArray& data)
|
||||
|
||||
qDebug() << "[TCP] " << "list: " << list;
|
||||
setSleepTimeAndReadNum(sleepvalue.toInt(), readvalue.toInt());
|
||||
m_Thread->setSocketIp(m_Station);
|
||||
if (!m_Thread->setIpAndPort(m_IP, m_host))
|
||||
m_Thread.setSocketIp(m_Station);
|
||||
if (!m_Thread.setIpAndPort(m_IP, m_host))
|
||||
{
|
||||
qDebug() << "[TCP] " << "m_IP:" << m_IP << " m_host:" << m_host << " connectToHost failed!";
|
||||
return false;
|
||||
@@ -406,13 +407,17 @@ bool Hd_SocketModule_ModbusTcp::initParas(QByteArray& data)
|
||||
//开启读PLC数据的客户端
|
||||
//开启socket
|
||||
//第一次运行,创建socket对象,后面发一次握手报文
|
||||
m_Thread->start();
|
||||
Sleep(500);
|
||||
|
||||
if (!m_Thread->getInitSuccessFlag())
|
||||
m_Thread.start();
|
||||
int cnt = 0;
|
||||
while (!m_Thread.getInitSuccessFlag())
|
||||
{
|
||||
qCritical() << "[TCP] " << "TCP init failed!";
|
||||
return false;
|
||||
QThread::msleep(100);
|
||||
cnt++;
|
||||
if(cnt>50)
|
||||
{
|
||||
qCritical() << "[TCP] " << "TCP init failed!";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//// 发送握手指令
|
||||
@@ -421,7 +426,7 @@ bool Hd_SocketModule_ModbusTcp::initParas(QByteArray& data)
|
||||
//WritePLCPack.append(array);
|
||||
|
||||
// 开启线程循环
|
||||
m_Thread->start();
|
||||
m_Thread.start();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -434,7 +439,7 @@ bool Hd_SocketModule_ModbusTcp::run()
|
||||
void Hd_SocketModule_ModbusTcp::setSleepTimeAndReadNum(int time, int num)
|
||||
{
|
||||
m_sleepTime = time;
|
||||
m_Thread->setReadPackValue(num);
|
||||
m_Thread.setReadPackValue(num);
|
||||
}
|
||||
////写单个寄存器指令,封装为报文
|
||||
//bool Hd_SocketModule_ModbusTcp::writeCommond(QString DM, QString Num)
|
||||
@@ -923,7 +928,6 @@ MyThread::~MyThread()
|
||||
delete m_mutex_lock;
|
||||
m_mutex_lock = nullptr;
|
||||
}
|
||||
std::exit(EXIT_SUCCESS);
|
||||
|
||||
}
|
||||
|
||||
@@ -998,6 +1002,7 @@ void MyThread::run()
|
||||
if (rtn == HDTcpStatus::Success)
|
||||
{
|
||||
qWarning() << "[TCP] " << " You have connected to the server ";
|
||||
init_success = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -17,8 +17,41 @@
|
||||
#pragma comment(lib,"./HslComunnicationCpp.lib")
|
||||
|
||||
#include "base.h"
|
||||
class MyThread;
|
||||
|
||||
class writeThread;
|
||||
class MyThread : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MyThread() {};
|
||||
~MyThread();
|
||||
bool setIpAndPort(QString ip, QString port);
|
||||
void run();
|
||||
void readSocketData(); //读取数据
|
||||
void writeSocketData(); //写入数据
|
||||
void decodePack();
|
||||
void setMutexLock(QMutex* lock) { m_mutex_lock = lock; }
|
||||
void setRunStop() { init_flag = 2; }
|
||||
void setReadPackValue(int value);
|
||||
void closeSocket();
|
||||
bool getInitSuccessFlag() { return init_success; }
|
||||
bool disReconnects();
|
||||
void setSocketIp(QString Station) { m_Station = Station; }
|
||||
private:
|
||||
QString m_IP;
|
||||
QString m_Port;
|
||||
QString m_Station;
|
||||
QMutex m_Mutex;
|
||||
QByteArray reciveData;
|
||||
QString socketIp;
|
||||
bool init_success = false; // 初始化成功 返回true;失败返回false
|
||||
int init_flag = 0; // false为完整数据包,true为非完整数据包
|
||||
int m_readPackValue = 122; // 接受50个数据包的长度 为 122 ,加包头一起为 130, 如果是 100的话就是 222 加包头为230
|
||||
QMutex* m_mutex_lock = nullptr;
|
||||
//QTcpSocket *tcpsocket = nullptr; // tcp通信的socket
|
||||
HDTcpBase* tcpsocket = nullptr;
|
||||
};
|
||||
|
||||
class Hd_SocketModule_ModbusTcp :public Base
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -75,43 +108,7 @@ private:
|
||||
//MyThread *m_Thread = nullptr;
|
||||
//QTcpSocket* tcpsocket = nullptr; //tcp通信的socket
|
||||
QMutex* m_Mutex = nullptr;
|
||||
MyThread* m_Thread = nullptr;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//自己创建线程
|
||||
class MyThread : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MyThread(QObject *parent = nullptr):QThread(parent){}
|
||||
~MyThread();
|
||||
bool setIpAndPort(QString ip,QString port);
|
||||
void run();
|
||||
void readSocketData(); //读取数据
|
||||
void writeSocketData(); //写入数据
|
||||
void decodePack();
|
||||
void setMutexLock(QMutex* lock) { m_mutex_lock = lock; }
|
||||
void setRunStop(){ init_flag = 2;}
|
||||
void setReadPackValue(int value);
|
||||
void closeSocket();
|
||||
bool getInitSuccessFlag(){return init_success;}
|
||||
bool disReconnects();
|
||||
void setSocketIp(QString Station) { m_Station = Station; }
|
||||
private:
|
||||
QString m_IP;
|
||||
QString m_Port;
|
||||
QString m_Station;
|
||||
QMutex m_Mutex;
|
||||
QByteArray reciveData;
|
||||
QString socketIp;
|
||||
bool init_success = true; // 初始化成功 返回true;失败返回false
|
||||
int init_flag = 0; // false为完整数据包,true为非完整数据包
|
||||
int m_readPackValue = 122; // 接受50个数据包的长度 为 122 ,加包头一起为 130, 如果是 100的话就是 222 加包头为230
|
||||
QMutex* m_mutex_lock = nullptr;
|
||||
//QTcpSocket *tcpsocket = nullptr; // tcp通信的socket
|
||||
HDTcpBase* tcpsocket = nullptr;
|
||||
MyThread m_Thread;
|
||||
};
|
||||
|
||||
extern "C"
|
||||
|
||||
@@ -14,18 +14,34 @@ backEndManager::backEndManager()
|
||||
}
|
||||
void backEndManager::run()
|
||||
{
|
||||
if(isinit ==false)
|
||||
if(isInit == ReInit)
|
||||
{
|
||||
if (_cameraManager != nullptr)
|
||||
delete _cameraManager;
|
||||
if (_triggerManager != nullptr)
|
||||
delete _triggerManager;
|
||||
|
||||
_triggerManager = new triggerManager();
|
||||
_cameraManager = new cameraManager();
|
||||
isInit = NotInit;
|
||||
}
|
||||
if(isInit == NotInit)
|
||||
{
|
||||
|
||||
std::vector<std::future<void>> futures;//Òì²½³õʼ»¯
|
||||
futures.push_back(std::async(std::launch::async, &triggerManager::init, _triggerManager, this));
|
||||
futures.push_back(std::async(std::launch::async, &cameraManager::init, _cameraManager, this));
|
||||
for (auto& future : futures) {
|
||||
future.wait();
|
||||
}
|
||||
isinit = true;
|
||||
sendInitFinished(true);
|
||||
if (_triggerManager->isInit == true && _cameraManager->isInit == true)
|
||||
isInit = InitOK;
|
||||
else
|
||||
isInit = InitFailure;
|
||||
sendInitFinished(isInit);
|
||||
}
|
||||
}
|
||||
|
||||
backEndManager::~backEndManager()
|
||||
{
|
||||
_triggerManager->stop();
|
||||
|
||||
@@ -13,28 +13,36 @@ class backEndManager :public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
initStatus isInit = NotInit;
|
||||
QMutex mutex;
|
||||
//数据类
|
||||
jsonConfiguration* _jsonConfiguration;
|
||||
detDataManager* _detDataManager;
|
||||
jsonConfiguration* _jsonConfiguration = nullptr;
|
||||
detDataManager* _detDataManager = nullptr;
|
||||
//线程类
|
||||
triggerManager* _triggerManager;//触发器
|
||||
cameraManager* _cameraManager;//
|
||||
threadManager* _threadManager;
|
||||
triggerManager* _triggerManager = nullptr;//触发器
|
||||
cameraManager* _cameraManager = nullptr;//
|
||||
threadManager* _threadManager = nullptr;
|
||||
backEndManager();
|
||||
~backEndManager();
|
||||
|
||||
void init()
|
||||
{
|
||||
isInit = NotInit;
|
||||
this->start();
|
||||
}
|
||||
void run();
|
||||
public slots:
|
||||
void reInitSlot()
|
||||
{
|
||||
isInit = ReInit;
|
||||
this->start();
|
||||
}
|
||||
private:
|
||||
bool isinit = false;
|
||||
|
||||
signals:
|
||||
void sendErrorToMainwindow(backEndError);
|
||||
void sendPixmapImageWidget(showImgPack*);
|
||||
void sendInitFinished(bool);
|
||||
void sendInitFinished(int);
|
||||
void sendInitString(QString);//初始化日志
|
||||
};
|
||||
#endif
|
||||
@@ -189,10 +189,17 @@ void cameraManager::init(backEndManager* input)
|
||||
camera* _camera = new camera(m_module,_backEndManager, cameras.size());
|
||||
QObject::connect(_camera, &camera::S1, this, &cameraManager::R1);
|
||||
cameras.insert(std::make_pair(m_module.key.toStdString(), _camera));
|
||||
emit _backEndManager->sendInitString("相机"+m_module.key + "初始化成功");
|
||||
qDebug() << "[INFO] " << " initParas success!";
|
||||
}
|
||||
else
|
||||
{
|
||||
QByteArray errorStr("getStatus");
|
||||
m_module.module_ptr->sendData(vec_mat,errorStr);
|
||||
isInit = false;
|
||||
qCritical() << "[Error] " << " moduleName:" << m_module.moduleName << " initParas failed!";
|
||||
emit _backEndManager->sendInitString("相机" + m_module.key + "初始化失败->"+ errorStr);
|
||||
}
|
||||
}
|
||||
|
||||
this->start();
|
||||
|
||||
@@ -126,7 +126,7 @@ public:
|
||||
camera.second->stop();
|
||||
this->terminate();
|
||||
}
|
||||
|
||||
bool isInit = true;
|
||||
private:
|
||||
bool loadModule(QString keyName, QString moduleName, QByteArray initByte);
|
||||
backEndManager* _backEndManager;
|
||||
|
||||
@@ -4,10 +4,11 @@
|
||||
#include <backStruct.h>
|
||||
#include <cameraManager.h>
|
||||
#include <jsonParsing.h>
|
||||
#define debugTesting 1
|
||||
static correctionStruct* correctionData;
|
||||
void triggerManager::decodeCameraCMD(QByteArray byte)
|
||||
{
|
||||
|
||||
#if debugTesting
|
||||
//if (checkTrigger(1, 2, byte) == true)
|
||||
{
|
||||
std::shared_ptr <detData> data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0);
|
||||
@@ -27,7 +28,8 @@ void triggerManager::decodeCameraCMD(QByteArray byte)
|
||||
camera->second->Process(data);
|
||||
}
|
||||
return;
|
||||
#if 0
|
||||
#endif
|
||||
#if debugTesting == 0
|
||||
if (byte.isEmpty())
|
||||
return;
|
||||
double cameraData = 0;
|
||||
@@ -164,11 +166,17 @@ void triggerManager::init(backEndManager* input)
|
||||
dManager = _backEndManager->_detDataManager;
|
||||
_cameraManager = _backEndManager->_cameraManager;
|
||||
_threadManager = _backEndManager->_threadManager;
|
||||
_jsonConfiguration = _backEndManager->_jsonConfiguration;
|
||||
|
||||
triggerFileName = _jsonConfiguration->tcp.moduleName;
|
||||
IpAndPort = _jsonConfiguration->tcp.finstcp_init;
|
||||
//triggerInitStr = QByteArray("sleeptime_%1_readnum_%2_writetype_ushort");
|
||||
QLibrary* m_lib = new QLibrary(triggerFileName);
|
||||
bool flag = m_lib->load();
|
||||
if (!m_lib->isLoaded())
|
||||
{
|
||||
emit _backEndManager->sendErrorToMainwindow(dllNotFound);
|
||||
//emit _backEndManager->sendErrorToMainwindow(dllNotFound);
|
||||
emit _backEndManager->sendInitString("找不到"+triggerFileName);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -176,22 +184,28 @@ void triggerManager::init(backEndManager* input)
|
||||
{
|
||||
CreateFunction createFun = (CreateFunction)m_lib->resolve("create");
|
||||
ReleaseFunction releaseFun = (ReleaseFunction)m_lib->resolve("destory");
|
||||
bool initFailure = false;
|
||||
if (createFun && releaseFun)
|
||||
{
|
||||
trigger = createFun();
|
||||
destory_finstcp = releaseFun;
|
||||
QByteArray initByte = QByteArray::fromStdString("sleeptime_20_readnum_300_writetype_ushort");
|
||||
std::vector<cv::Mat> dddd;
|
||||
trigger->reciveData(dddd, QByteArray::fromStdString("init_127.0.0.1_502_1"));
|
||||
trigger->initParas(initByte);
|
||||
trigger->reciveData(vec_mat, QByteArray(IpAndPort.toUtf8()));
|
||||
emit _backEndManager->sendInitString(triggerFileName + "连接到" + IpAndPort);
|
||||
initFailure=trigger->initParas(initByte);
|
||||
}
|
||||
else
|
||||
|
||||
if(initFailure==false)
|
||||
{
|
||||
emit _backEndManager->sendErrorToMainwindow(triggerInitFailure);
|
||||
delete m_lib;
|
||||
m_lib = nullptr;
|
||||
isInit = false;
|
||||
emit _backEndManager->sendInitString(triggerFileName + "初始化失败");
|
||||
return;
|
||||
}
|
||||
else
|
||||
emit _backEndManager->sendInitString(triggerFileName + "成功");
|
||||
}
|
||||
this->start();
|
||||
}
|
||||
|
||||
@@ -65,10 +65,14 @@ private:
|
||||
class triggerManager : public QThread
|
||||
{
|
||||
public:
|
||||
QString triggerFileName = QString("Hd_SocketModule_ModbusTcp");
|
||||
QString triggerFileName;
|
||||
QString IpAndPort;
|
||||
QString triggerInitStr;
|
||||
~triggerManager()
|
||||
{
|
||||
runFlag = false;
|
||||
this->stop();
|
||||
this->terminate();
|
||||
delete trigger;
|
||||
}
|
||||
void init(backEndManager* input);
|
||||
@@ -136,11 +140,13 @@ public:
|
||||
}
|
||||
|
||||
int getValue(int dmPos, QByteArray byte);
|
||||
bool isInit = true;
|
||||
private:
|
||||
threadManager* _threadManager;
|
||||
detDataManager* dManager;
|
||||
backEndManager* _backEndManager;
|
||||
cameraManager* _cameraManager;
|
||||
jsonConfiguration* _jsonConfiguration;
|
||||
triggerLockerT tLocker;//防止重复触发,每次收到数据时检查数据是否与上次相同,如果相同checkTrigger会返回false
|
||||
/// <summary>
|
||||
/// 检测QByteArray中某位置的值是否和输入一样,使用了绝对位置
|
||||
|
||||
@@ -6,28 +6,30 @@
|
||||
#include <qlayout.h>
|
||||
#include <qtextedit.h>;
|
||||
#include <globalStruct.h>
|
||||
static QPixmap cvMatToQPixmap(const cv::Mat& mat) {
|
||||
QImage qImg;
|
||||
if (mat.channels() == 3) {
|
||||
//cv::cvtColor(mat, mat, cv::COLOR_BGR2RGB);
|
||||
qImg = QImage(mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
|
||||
}
|
||||
else {
|
||||
qImg = QImage((const unsigned char*)(mat.data), mat.cols, mat.rows, mat.step, QImage::Format_Grayscale8);
|
||||
}
|
||||
return QPixmap::fromImage(qImg);
|
||||
}
|
||||
#include <uiModule/components/fancyButton.h>
|
||||
class MainWindow;
|
||||
class loadingWidget : public QWidget {
|
||||
public:
|
||||
QLabel* sign;
|
||||
QMovie* movie;
|
||||
QTextEdit* initLog;
|
||||
bool isRunning = false;
|
||||
QLabel* sign = nullptr;
|
||||
QMovie* movie = nullptr;
|
||||
QTextEdit* initLog = nullptr;
|
||||
fancyButtonText* retryBtn = new fancyButtonText(100,50,"重试","重新进行初始化");
|
||||
QGridLayout* glayout = new QGridLayout(this);
|
||||
loadingWidget(QWidget* parent = nullptr) : QWidget(parent) {
|
||||
glayout->setAlignment(Qt::AlignCenter);
|
||||
}
|
||||
void start(QWidget* widget)
|
||||
QVBoxLayout* vlayout = new QVBoxLayout(this);
|
||||
loadingWidget()
|
||||
{
|
||||
glayout->setAlignment(Qt::AlignCenter);
|
||||
connect(retryBtn, &QPushButton::clicked, [=]()
|
||||
{
|
||||
retryBtn->setDisabled(true);
|
||||
start();
|
||||
});
|
||||
}
|
||||
void start()
|
||||
{
|
||||
if (isRunning == true)
|
||||
stop();
|
||||
QPalette palette;
|
||||
palette.setColor(QPalette::WindowText, Qt::white);
|
||||
sign = new QLabel(this);
|
||||
@@ -48,54 +50,73 @@ public:
|
||||
QFont font("微软雅黑", 8);
|
||||
|
||||
initLog->setFont(font);
|
||||
//initLog->setPalette(palette);
|
||||
//initLog->setTextColor(QString("rgb(%1)").arg(sColor_Gold)); // 设置文字颜色为蓝色
|
||||
initLog->setTextColor(Qt::white);
|
||||
initLog->append("测试测试");
|
||||
initLog->append("正在初始化...");
|
||||
|
||||
vlayout->addWidget(initLog);
|
||||
vlayout->addWidget(retryBtn);
|
||||
retryBtn->hide();
|
||||
|
||||
glayout->addWidget(sign, 0, 0);
|
||||
glayout->addWidget(initLog, 1, 0);
|
||||
glayout->addLayout(vlayout, 1, 0);
|
||||
glayout->setRowStretch(0, 5);
|
||||
glayout->setRowStretch(1, 4);
|
||||
screenshot_ = QPixmap::grabWindow(widget->winId());
|
||||
//screenshot_ = QPixmap::grabWindow(widget->winId());
|
||||
update(); // 更新widget以显示新的截图
|
||||
|
||||
isRunning = true;
|
||||
}
|
||||
void stop()
|
||||
{
|
||||
if (isRunning == false)
|
||||
return;
|
||||
isRunning = false;
|
||||
delete sign;
|
||||
delete movie;
|
||||
if (movie != nullptr)
|
||||
delete movie;
|
||||
delete initLog;
|
||||
|
||||
sign = nullptr;
|
||||
movie = nullptr;
|
||||
initLog = nullptr;
|
||||
}
|
||||
void setError()
|
||||
{
|
||||
if (isRunning == true)
|
||||
{
|
||||
if (movie != nullptr)
|
||||
delete movie;
|
||||
movie = nullptr;
|
||||
sign->setPixmap(QPixmap(":/topBar/icon/error.png"));
|
||||
retryBtn->show();
|
||||
retryBtn->setEnabled(true);
|
||||
}
|
||||
}
|
||||
protected:
|
||||
void paintEvent(QPaintEvent* event) override {
|
||||
//if (screenshot_.isNull())
|
||||
// return;
|
||||
//QImage image = screenshot_.toImage();
|
||||
//image = image.convertToFormat(QImage::Format_RGB888);
|
||||
//cv::Mat originalMat = cv::Mat(
|
||||
// image.height(),
|
||||
// image.width(),
|
||||
// CV_8UC3,
|
||||
// image.bits(),
|
||||
// image.bytesPerLine());
|
||||
//cv::Mat blurredMat;
|
||||
//cv::blur(originalMat, blurredMat, cv::Size(10, 10)); // 调整模糊半径以获得不同程度的模糊效果
|
||||
//QPixmap blurredPixmap = cvMatToQPixmap(blurredMat);
|
||||
//QPainter painter(this);
|
||||
//painter.drawPixmap(0, 0, blurredPixmap);
|
||||
QWidget::paintEvent(event); // 调用父类的 paintEvent 函数,绘制控件本身
|
||||
//// 在模糊图片上绘制文字
|
||||
//QPalette palette;
|
||||
//palette.setColor(QPalette::WindowText, Qt::white);
|
||||
//QFont font("微软雅黑", 100, QFont::Bold);
|
||||
//QFont font2("微软雅黑", 90, QFont::Bold);
|
||||
//painter.setFont(font);
|
||||
//painter.setPen(Qt::black);
|
||||
//painter.drawText(this->rect(), Qt::AlignCenter, "WAIT");
|
||||
//painter.setFont(font2);
|
||||
//painter.setPen(Qt::white);
|
||||
//painter.drawText(this->rect(), Qt::AlignCenter, "WAIT");
|
||||
}
|
||||
#if 0
|
||||
//void paintEvent(QPaintEvent* event) override {
|
||||
// if (paintOnce == false)
|
||||
// return;
|
||||
// if (screenshot_.isNull())
|
||||
// return;
|
||||
// paintOnce = false;
|
||||
// QImage image = screenshot_.toImage();
|
||||
// image = image.convertToFormat(QImage::Format_RGB888);
|
||||
// cv::Mat originalMat = cv::Mat(
|
||||
// image.height(),
|
||||
// image.width(),
|
||||
// CV_8UC3,
|
||||
// image.bits(),
|
||||
// image.bytesPerLine());
|
||||
// cv::Mat blurredMat;
|
||||
// cv::blur(originalMat, blurredMat, cv::Size(10, 10)); // 调整模糊半径以获得不同程度的模糊效果
|
||||
// QPixmap blurredPixmap = cvMatToQPixmap(blurredMat);
|
||||
// QPainter painter(this);
|
||||
// painter.drawPixmap(0, 0, blurredPixmap);
|
||||
// //QWidget::paintEvent(event); // 调用父类的 paintEvent 函数,绘制控件本身
|
||||
|
||||
//}
|
||||
#endif
|
||||
private:
|
||||
QPixmap screenshot_;
|
||||
};
|
||||
};
|
||||
#pragma once
|
||||
@@ -23,7 +23,13 @@ enum backEndError
|
||||
triggerConnectionError,
|
||||
camerInitFailure
|
||||
};
|
||||
|
||||
enum initStatus
|
||||
{
|
||||
NotInit,
|
||||
InitFailure,
|
||||
InitOK,
|
||||
ReInit
|
||||
};
|
||||
enum imgWidgetShowType
|
||||
{
|
||||
imgWidgetOri,
|
||||
|
||||
@@ -32,5 +32,6 @@
|
||||
<file>icon/waitting.png</file>
|
||||
<file>icon/loading.gif</file>
|
||||
<file>icon/sql.png</file>
|
||||
<file>icon/error.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
@@ -18,6 +18,9 @@ void connectSignalAndSlots(MainWindow* front, backEndManager* back)
|
||||
QObject::connect(back, &backEndManager::sendPixmapImageWidget, front, &MainWindow::recvPixmapImageWidget);
|
||||
QObject::connect(back, &backEndManager::sendInitString, front, &MainWindow::recvInitString);
|
||||
QObject::connect(back, &backEndManager::sendInitFinished, front, &MainWindow::recvInitFinished);
|
||||
|
||||
QObject::connect(front, &MainWindow::reInitSignal, back, &backEndManager::reInitSlot);
|
||||
QObject::connect(front->_loadingWidget.retryBtn, &QPushButton::clicked, back, &backEndManager::reInitSlot);
|
||||
}
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
|
||||
@@ -118,11 +118,6 @@ void MainWindow::topBarInit()
|
||||
iconLabel->setFixedWidth(buttonWidth);
|
||||
iconLabel->setFixedWidth((buttonWidth/2)* title.size());
|
||||
iconLabel->setPalette(palette);
|
||||
//QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect(iconLabel);
|
||||
//effect->setColor(Qt::white);
|
||||
//effect->setBlurRadius(20);
|
||||
//effect->setOffset(0);
|
||||
//iconLabel->setGraphicsEffect(effect);
|
||||
|
||||
// 右侧
|
||||
//最小化
|
||||
@@ -175,6 +170,7 @@ void MainWindow::topBarInit()
|
||||
QObject::connect(exitButton, &QPushButton::clicked, this, &QApplication::quit); // 点击退出按钮退出应用程序
|
||||
// 将菜单栏添加到MainWindow的布局中
|
||||
this->setMenuWidget(menuBarWidget);
|
||||
_loadingWidget.start();
|
||||
}
|
||||
|
||||
void MainWindow::leftBarInit()
|
||||
|
||||
@@ -34,8 +34,6 @@ class MainWindow : public QMainWindow
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
//主要控件
|
||||
std::vector<toolBarButton*>pageBtns;
|
||||
QStackedWidget stackedWidgets;//一共三层,加载界面,登录界面,主要界面
|
||||
@@ -47,7 +45,8 @@ private:
|
||||
displayWidget* _displayWidget;
|
||||
configSettingWidget* _configSettingWidget;
|
||||
logWidget* _logWidget;
|
||||
|
||||
private:
|
||||
Ui::MainWindow* ui;
|
||||
//动画效果
|
||||
QGraphicsBlurEffect* blurEffect;
|
||||
QPropertyAnimation* blurEffectAnimation;
|
||||
@@ -111,7 +110,7 @@ public slots:
|
||||
blurEffectAnimation->setStartValue(0);
|
||||
blurEffectAnimation->setEndValue(20);
|
||||
blurEffectAnimation->start();
|
||||
_loadingWidget.start(&stackedWidgets);
|
||||
//_loadingWidget.start();
|
||||
stackedWidgets.setCurrentIndex(1);
|
||||
blurEffectAnimation->setStartValue(0);
|
||||
blurEffectAnimation->setEndValue(0);
|
||||
@@ -136,17 +135,29 @@ public slots:
|
||||
_displayWidget->_ImageWidgetManager.showImg(pack->img, pack->type, pack->index);
|
||||
delete pack;
|
||||
}
|
||||
void recvInitFinished(bool input)
|
||||
void recvInitFinished(int input)
|
||||
{
|
||||
backEndInit = true;
|
||||
//loading(false);
|
||||
switch (input)
|
||||
{
|
||||
case initStatus::InitOK:
|
||||
backEndInit = true;
|
||||
loading(false);
|
||||
break;
|
||||
default:
|
||||
_loadingWidget.setError();
|
||||
backEndInit = false;
|
||||
}
|
||||
}
|
||||
void recvInitString(QString)
|
||||
void recvInitString(QString strIn)
|
||||
{
|
||||
if (_loadingWidget.isRunning != false);
|
||||
{
|
||||
_loadingWidget.initLog->append(strIn);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
signals:
|
||||
|
||||
void reInitSignal();
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent* event) override {
|
||||
if (event->buttons() == Qt::LeftButton) {
|
||||
@@ -158,8 +169,7 @@ protected:
|
||||
}
|
||||
void mouseMoveEvent(QMouseEvent* event) override {
|
||||
if (event->buttons() == Qt::LeftButton && isMoving) {
|
||||
QPoint delta = event->globalPos() - startPos;
|
||||
move(startFrameGeometry.topLeft() + delta);
|
||||
move(startFrameGeometry.topLeft() + (event->globalPos() - startPos));
|
||||
}
|
||||
QMainWindow::mouseMoveEvent(event);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user