2451 lines
95 KiB
C++
2451 lines
95 KiB
C++
#include "Qt_epWindow.h"
|
||
#include "qapplication.h"
|
||
|
||
#pragma execution_character_set("utf-8")
|
||
|
||
clock_t pressStart, pressStop;
|
||
|
||
Qt_epWindow::Qt_epWindow(QWidget *parent)
|
||
: QMainWindow(parent)
|
||
{
|
||
ui.setupUi(this);
|
||
//追踪鼠标,写在构造函数中
|
||
this->setMouseTracking(true);
|
||
ui.centralWidget->setMouseTracking(true);
|
||
ui.widget->setMouseTracking(true);
|
||
ui.frame_tab->setMouseTracking(true);
|
||
ui.tabWidget->setMouseTracking(true);
|
||
ui.widget->setMouseTracking(true);
|
||
ui.frameA->setMouseTracking(true);
|
||
ui.widget_image->setMouseTracking(true);
|
||
ui.title->setMouseTracking(true);
|
||
//ui.pushButton_min->setMouseTracking(true);
|
||
//ui.pushButton_close->setMouseTracking(true);
|
||
//ui.pushButton_max->setMouseTracking(true);
|
||
//setWindowIcon(QIcon("./icon/logo_Dongsheng.png"));
|
||
|
||
//ui.pushButton_min->setStyleSheet("QToolTip{color: rgb(32, 36, 40);}"); //设置边框, 边框色, 背景色, 字体色, 字号
|
||
//ui.pushButton_close->setStyleSheet("QToolTip{color: rgb(32, 36, 40);}"); //设置边框, 边框色, 背景色, 字体色, 字号
|
||
//ui.pushButton_max->setStyleSheet("QToolTip{color: rgb(32, 36, 40);}"); //设置边框, 边框色, 背景色, 字体色, 字号
|
||
//ui.pushButton_min->setToolTip(tr("最小化"));
|
||
//ui.pushButton_close->setToolTip(tr("关闭"));
|
||
//ui.pushButton_max->setToolTip(tr("向下还原"));
|
||
ui.label_icon->setStyleSheet("image: url(./Icon/logo_Dongsheng.png);");
|
||
ui.pushButton_min->setText("");
|
||
ui.pushButton_close->setText("");
|
||
ui.pushButton_max->setText("");
|
||
|
||
ui.pushButton_min->setStyleSheet("background-color:transparent;image: url(./Icon/min_n.png);");
|
||
ui.pushButton_close->setStyleSheet("background-color:transparent;image: url(./Icon/close_n.png);");
|
||
ui.pushButton_max->setStyleSheet("background-color:transparent;image: url(./Icon/Max_n.png);");
|
||
|
||
connect(ui.pushButton_min, &QPushButton::pressed, [=]() {
|
||
this->showMinimized();
|
||
qApp->processEvents();
|
||
});
|
||
connect(ui.pushButton_close, &QPushButton::clicked, [=]() {
|
||
|
||
static int sec15 = 15;
|
||
static QTimer* aotuCloseTimer = new QTimer;
|
||
connect(aotuCloseTimer, &QTimer::timeout, [=]() {
|
||
sec15--;
|
||
waiteBox.setText("确认退出程序?" + QString::number(sec15) + "秒后自动取消此操作。");
|
||
if (sec15 == 0)
|
||
{
|
||
//waiteBox_result = QMessageBox::No;
|
||
waiteBox.close();
|
||
aotuCloseTimer->stop();
|
||
sec15 = 5;
|
||
}
|
||
});
|
||
aotuCloseTimer->start(1000);
|
||
qApp->processEvents();
|
||
waiteBox.setWindowTitle("确认退出程序?");
|
||
waiteBox.setText("确认退出程序?15秒后自动取消此操作。");
|
||
waiteBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
||
waiteBox.show();
|
||
|
||
int ret = waiteBox.exec();
|
||
|
||
// 检查用户点击了哪个按钮
|
||
if (ret == QMessageBox::Yes) {
|
||
// 用户点击了“确认”按钮,执行后续操作
|
||
// ... 在这里添加你的代码 ...
|
||
qDebug() << "确认关闭程序";
|
||
this->close();
|
||
}
|
||
else {
|
||
// 用户点击了“取消”按钮或其他地方,可以选择不执行任何操作或执行其他操作
|
||
qDebug() << "用户点击了取消或未选择任何操作";
|
||
|
||
}
|
||
|
||
//this->close();
|
||
qApp->processEvents();
|
||
});
|
||
|
||
QScreen* screen = QGuiApplication::primaryScreen();
|
||
QSize screenSize = screen->size();
|
||
static int screenWidth = screenSize.width();
|
||
static int screenHeight = screenSize.height();
|
||
qDebug() << "Screen resolution: " << screenWidth << "x" << screenHeight;
|
||
|
||
static int maxClickedNum = 1;
|
||
connect(ui.pushButton_max, &QPushButton::pressed, [=]() {
|
||
if (maxClickedNum)
|
||
{
|
||
//ui.pushButton_max->setStyleSheet("background-color:transparent;image: url(Max_n.png);");
|
||
//ui.pushButton_max->setToolTip(tr("向下还原"));
|
||
setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
||
this->showMaximized();
|
||
ui.frame_right->setMinimumSize(screenWidth / 5, 300);
|
||
this->move(0, 0);
|
||
maxClickedNum = 0;
|
||
}
|
||
else {
|
||
//ui.pushButton_max->setStyleSheet("background-color:transparent;image: url(Max_n.png);");
|
||
//ui.pushButton_max->setToolTip(tr("最大化"));
|
||
setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
||
this->showNormal();
|
||
this->resize(screenWidth / 4 * 3, screenHeight / 4 * 3);
|
||
ui.frame_right->setMinimumSize(screenWidth / 4 * 3 / 5, 300);
|
||
this->move(screenWidth / 8, screenHeight / 6);
|
||
maxClickedNum = 1;
|
||
}
|
||
qApp->processEvents();
|
||
});
|
||
setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
||
//this->showNormal();
|
||
this->resize(screenWidth / 4 * 3, screenHeight / 4 * 3);
|
||
ui.frame_right->setMinimumSize(screenWidth / 4 * 3 / 5, 300);
|
||
this->move(screenWidth / 8, screenHeight / 6);
|
||
|
||
//this->setStyleSheet("QMainWindow::titlebar{background: rgb(255, 0, 0);}"); // 设置背景颜色
|
||
//setStyleSheet("QMainWindow::titlebar{background: rgb(255, 0, 0);}"); // 设置背景颜色
|
||
|
||
|
||
myQtPassword = new QtPassword;
|
||
connect(myQtPassword, SIGNAL(LoginSuccess(QString)), this, SLOT(getLoginSuccess(QString)));
|
||
|
||
//密码登录界面;管理员、操作员,默认用户,密码为123456789
|
||
static QTimer* passwordShow = new QTimer;
|
||
connect(passwordShow, &QTimer::timeout, [=]() {
|
||
myQtPassword->show();
|
||
passwordShow->stop();
|
||
});
|
||
//passwordShow->start(200);
|
||
|
||
|
||
|
||
ui.label_15->setText("初始化中..");
|
||
ui.label_15->setStyleSheet("color: red;");
|
||
//参数设置;
|
||
//修改配置文件,注意先备份
|
||
ui.label_SN->clear();
|
||
pressStart = clock();
|
||
|
||
if (0)
|
||
{
|
||
myQtPassword->show();
|
||
}
|
||
else
|
||
{
|
||
//跳过登陆;
|
||
this->show();
|
||
getLoginSuccess("管理员:超级用户");
|
||
}
|
||
}
|
||
|
||
void Qt_epWindow::getLoginSuccess(QString authority_user)
|
||
{
|
||
this->show();
|
||
qApp->processEvents();
|
||
if (ifFirstLogin == true)
|
||
{
|
||
ui.label_15->setText("初始化中..");
|
||
ui.label_15->setStyleSheet("color: red;");
|
||
//设置Widget背景;textEdit最大行数
|
||
initWidget();
|
||
//设置工具
|
||
setTools();
|
||
//按钮事件
|
||
pushButtonS();
|
||
|
||
initLogic_transfer_OK = initLogic_transfer();
|
||
if (initLogic_transfer_OK == true)
|
||
{
|
||
|
||
ui.label_15->setText("初始化成功\r\n待运行");
|
||
ui.label_15->setStyleSheet("color: yellow;");
|
||
}
|
||
else
|
||
{
|
||
ui.label_15->setText("初始化失败");
|
||
ui.label_15->setStyleSheet("color: red;");
|
||
}
|
||
//通用逻辑;初始化并自动运行
|
||
//setLogic_transfer();
|
||
}
|
||
//不同权限,
|
||
//if (authority_user.contains("操作员"))
|
||
//{
|
||
// ui.pushButton_set->hide();
|
||
// //ui.pushButton_set->setDisabled(true);
|
||
//}
|
||
//else if (authority_user.contains("管理员"))
|
||
//{
|
||
// ui.pushButton_set->show();
|
||
// //ui.pushButton_set->setEnabled(true);
|
||
//}
|
||
ui.label_operator->setText(authority_user);
|
||
ifFirstLogin = false;
|
||
myauthority_user = authority_user;
|
||
}
|
||
|
||
|
||
bool Qt_epWindow::initLogic_transfer()
|
||
{
|
||
my_Logic_transfer = new Logic_transfer;
|
||
if (my_Logic_transfer)
|
||
{
|
||
cfgName = "camera_cfg.json";
|
||
if (programNum == 2)
|
||
cfgName = "camera_cfg2.json";
|
||
|
||
//开放接口,可以根据此方式,实现产品切换(不同的配置文件)
|
||
programObj = my_Logic_transfer->load_camera_cfg(cfgName);//1、加载配置文件
|
||
QString cfg_errMessage;
|
||
bool ifCfgOK = my_Logic_transfer->checkJsonObject(programObj, cfg_errMessage); //2、配置文件检查
|
||
QMessageBox* myBox = new QMessageBox;
|
||
if (ifCfgOK == false) { myBox->information(this, "camera_cfg错误", cfg_errMessage); return false; }
|
||
else
|
||
{
|
||
my_Logic_transfer->setJsonObject(programObj); //3、传递配置文件到程序
|
||
ifCfgOK = my_Logic_transfer->initTask();//4、初始化任务
|
||
if (ifCfgOK == false) { myBox->information(this, "initTask错误", "initTask失败,请阅读Log日志进行分析"); return false; }
|
||
Sleep(50);
|
||
}
|
||
if (ifFisrtRun == true)
|
||
{
|
||
//自动布局图像显示窗口
|
||
adjustLayout(programObj);
|
||
//自动布局缺陷统计tabwidget
|
||
adjustDefectWidegt(programObj);
|
||
}
|
||
ifFisrtRun = false;
|
||
|
||
//项目通信流程,1简单流程,2标准流程;
|
||
QString myQString = programObj.value("是否为标准通信流程").toString();
|
||
if (myQString.contains("false"))
|
||
CommunicationProcessLevel = 1;
|
||
else if (myQString.contains("true"))
|
||
CommunicationProcessLevel = 2;
|
||
}
|
||
else return false;
|
||
ui.label_type->setText(programObj.value("任务名").toString());
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "通用逻辑加载成功! 按下“开始按钮”后运行程序。");
|
||
return true;
|
||
}
|
||
bool Qt_epWindow::startLogic_transfer()
|
||
{
|
||
if (initLogic_transfer_OK == true)
|
||
{
|
||
bool ifCfgOK = my_Logic_transfer->startTask();//5、开始任务
|
||
QMessageBox* myBox = new QMessageBox;
|
||
if (ifCfgOK == false) { myBox->information(this, "startTask错误", "startTask失败,请阅读Log日志进行分析"); return false; }
|
||
//6、获取全部图像显示数据;可使用定时器,或者线程;
|
||
{
|
||
showTimer = new QTimer;
|
||
showTimer->setInterval(5);//50ms时,数据太多,if (image)崩溃
|
||
static int showLogNum = 0;
|
||
showLogNum = 0;
|
||
connect(showTimer, &QTimer::timeout, this, [=]() {
|
||
QQueue< showImgStruct> myShow;
|
||
//if (my_Logic_transfer->queue_showImgStruct.size() > 0)
|
||
if (my_Logic_transfer->getShowQImage(myShow))
|
||
{
|
||
if (m_Viewlist.size() == 0)
|
||
{
|
||
myShow.clear();
|
||
return;
|
||
}
|
||
//重新设置画布,有时耗时稍长,导致崩溃
|
||
nwith = m_Viewlist[0]->width();//获取界面控件Graphics View的宽度
|
||
nheight = m_Viewlist[0]->height();//获取界面控件Graphics View的高度
|
||
Sleep(1);
|
||
for (int i = 0; i < myShow.size(); i++)
|
||
{
|
||
if(ifStopLogic_transfer==false)
|
||
showTransferImage(myShow[i].cameraKey_index, myShow[i].show_QImage);//定制UI,显示图像
|
||
else
|
||
{
|
||
if (myShow[i].show_QImage)
|
||
{
|
||
delete myShow[i].show_QImage;
|
||
myShow[i].show_QImage = nullptr;
|
||
}
|
||
}
|
||
//Sleep(1);
|
||
}
|
||
}
|
||
});
|
||
showTimer->start();
|
||
}
|
||
//7.信号:检测、汇总算法返回的数据
|
||
{
|
||
connect(my_Logic_transfer, SIGNAL(LogicTransfer_writeData(QString, QString, QString, QByteArray)), this, SLOT(getTransferData(QString, QString, QString, QByteArray)));// 传递数据
|
||
}
|
||
|
||
ifStopLogic_transfer = false;
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "程序自动运行。");
|
||
return true;
|
||
}
|
||
else
|
||
return false;
|
||
}
|
||
bool Qt_epWindow::stopLogic_transfer()
|
||
{
|
||
if (initLogic_transfer_OK == true)
|
||
{
|
||
ifStopLogic_transfer = true;
|
||
my_Logic_transfer->disconnect(SIGNAL(LogicTransfer_writeData(QString, QString, QString, QByteArray)));
|
||
return true;
|
||
}
|
||
else
|
||
return false;
|
||
}
|
||
|
||
//重新加载
|
||
bool Qt_epWindow::setLogic_transfer()
|
||
{
|
||
ifFisrtRun = true;
|
||
my_Logic_transfer = new Logic_transfer;
|
||
if (my_Logic_transfer)
|
||
{
|
||
cfgName = "camera_cfg.json";
|
||
if(programNum == 2)
|
||
cfgName= "camera_cfg2.json";
|
||
|
||
//开放接口,可以根据此方式,实现产品切换(不同的配置文件)
|
||
programObj = my_Logic_transfer->load_camera_cfg(cfgName);//1、加载配置文件
|
||
QString cfg_errMessage;
|
||
bool ifCfgOK = my_Logic_transfer->checkJsonObject(programObj, cfg_errMessage); //2、配置文件检查
|
||
QMessageBox* myBox = new QMessageBox;
|
||
if (ifCfgOK == false) { myBox->information(this, "camera_cfg" + QString::fromLocal8Bit("错误"), cfg_errMessage); return false; }
|
||
else
|
||
{
|
||
my_Logic_transfer->setJsonObject(programObj); //3、传递配置文件到程序
|
||
ifCfgOK = my_Logic_transfer->initTask();//4、初始化任务
|
||
if (ifCfgOK == false) { myBox->information(this, "initTask错误", "initTask失败,请阅读Log日志进行分析"); return false; }
|
||
Sleep(50);
|
||
ifCfgOK = my_Logic_transfer->startTask();//5、开始任务
|
||
if (ifCfgOK == false) { myBox->information(this, "startTask错误", "startTask失败,请阅读Log日志进行分析"); return false;; }
|
||
Sleep(50);
|
||
//6、获取全部图像显示数据;可使用定时器,或者线程;
|
||
{
|
||
showTimer = new QTimer;
|
||
showTimer->setInterval(5);//50ms时,数据太多,if (image)崩溃
|
||
static int showLogNum = 0;
|
||
showLogNum = 0;
|
||
connect(showTimer, &QTimer::timeout, this, [=]() {
|
||
QQueue< showImgStruct> myShow;
|
||
//if (my_Logic_transfer->queue_showImgStruct.size() > 0)
|
||
if (my_Logic_transfer->getShowQImage(myShow))
|
||
{
|
||
if (m_Viewlist.size() == 0)
|
||
{
|
||
myShow.clear();
|
||
return;
|
||
}
|
||
//重新设置画布,有时耗时稍长,导致崩溃
|
||
nwith = m_Viewlist[0]->width();//获取界面控件Graphics View的宽度
|
||
nheight = m_Viewlist[0]->height();//获取界面控件Graphics View的高度
|
||
Sleep(1);
|
||
for (int i = 0; i < myShow.size(); i++)
|
||
{
|
||
if (ifStopLogic_transfer == false)
|
||
showTransferImage(myShow[i].cameraKey_index, myShow[i].show_QImage);//定制UI,显示图像
|
||
else
|
||
{
|
||
if (myShow[i].show_QImage)
|
||
{
|
||
delete myShow[i].show_QImage;
|
||
myShow[i].show_QImage = nullptr;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
});
|
||
showTimer->start();
|
||
}
|
||
//7.信号:检测、汇总算法返回的数据
|
||
{
|
||
connect(my_Logic_transfer, SIGNAL(LogicTransfer_writeData(QString, QString, QString, QByteArray)), this, SLOT(getTransferData(QString, QString, QString, QByteArray)));// 传递数据
|
||
|
||
}
|
||
if (ifFisrtRun == true)
|
||
{
|
||
//自动布局图像显示窗口
|
||
adjustLayout(programObj);
|
||
//自动布局缺陷统计tabwidget
|
||
adjustDefectWidegt(programObj);
|
||
}
|
||
ifFisrtRun = false;
|
||
|
||
ui.label_type->setText(programObj.value("任务名").toString());
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "通用逻辑加载成功,程序自动运行");
|
||
|
||
//项目通信流程,1简单流程,2标准流程;
|
||
QString myQString = programObj.value("是否为标准通信流程").toString();
|
||
if (myQString.contains("false"))
|
||
CommunicationProcessLevel = 1;
|
||
else if (myQString.contains("true"))
|
||
CommunicationProcessLevel = 2;
|
||
}
|
||
}
|
||
return true;
|
||
//static QTimer* LogTimer = new QTimer;
|
||
//LogTimer->setInterval(100);
|
||
//static int showLogNum = 0;
|
||
//connect(LogTimer, &QTimer::timeout, this, [=]() {
|
||
// if (LogList.size() > showLogNum)
|
||
// {
|
||
// /*ifSettingEdit = true;
|
||
// ui.verticalScrollBar->setMaximum(LogList.size());
|
||
// ui.verticalScrollBar->setValue(LogList.size());*/
|
||
// while (LogList.size() > showLogNum)
|
||
// {
|
||
// QMutexLocker locker(logLock);
|
||
// //ui.plainTextEdit->moveCursor(QTextCursor::StartOfBlock);
|
||
// //ui.plainTextEdit->textCursor().insertText(QString::number(showLogNum) + " "+LogList.dequeue() + "\n");
|
||
// if (LogList[showLogNum].contains("#"))
|
||
// if (LogList[showLogNum].contains("9#"))
|
||
// setInsertTextColor(QColor("green"));
|
||
// else
|
||
// setInsertTextColor(QColor("red"));
|
||
// else
|
||
// setInsertTextColor(QColor("black"));
|
||
// ui.plainTextEdit_history->appendPlainText(LogList[showLogNum]);
|
||
// showLogNum++;
|
||
// Sleep(1);
|
||
// //if (showLogNum % 20 == 0)
|
||
// // ui.label_2->setText("Log: " + QString::number(showLogNum));
|
||
// }
|
||
// //当前
|
||
// //ifSettingEdit = false;
|
||
// }
|
||
// });
|
||
//LogTimer->start();
|
||
}
|
||
|
||
void Qt_epWindow::setInsertTextColor(QPlainTextEdit* plainTextEdit,QColor& color)
|
||
|
||
{
|
||
QTextCharFormat fmt;//文本字符格式
|
||
fmt.setForeground(color);// 前景色(即字体色)设为color色
|
||
QTextCursor cursor = plainTextEdit->textCursor();//获取文本光标
|
||
cursor.mergeCharFormat(fmt);//光标后的文字就用该格式显示
|
||
plainTextEdit->mergeCurrentCharFormat(fmt);//plainTextEdit使用当前的字符格式
|
||
}
|
||
|
||
//自动布局图像显示窗口
|
||
void Qt_epWindow::adjustLayout(QJsonObject json_obj)
|
||
{
|
||
//ui.gridLayout = new QGridLayout(ui.widget_image);
|
||
|
||
//{
|
||
// //ui.widget_image->c
|
||
// if (m_Viewlist.size() >0)
|
||
// {
|
||
// for (int iii = m_Viewlist.size() - 1; iii >= 0; iii--)
|
||
// {
|
||
// ui.gridLayout->removeWidget(m_Labellist.at(iii));
|
||
//
|
||
// }
|
||
// }
|
||
//}
|
||
|
||
//m_Labellist.clear();
|
||
//cameraKeyList.clear();
|
||
//cNameList.clear();
|
||
//m_pImageList.clear();
|
||
//qgraphicsSceneList.clear();
|
||
//m_Viewlist.clear();
|
||
//cameraKey_cName_surface.clear();
|
||
|
||
QJsonArray array;
|
||
QJsonArray stationlist = json_obj.value("工站列表").toArray();
|
||
QJsonArray algorithmlist;
|
||
for (int i = 0; i < stationlist.size(); i++)
|
||
{
|
||
QJsonObject station_obj = stationlist.at(i).toObject();
|
||
QString key = station_obj.value("工站名").toString();
|
||
QJsonArray cameramodulelist = station_obj.value("相机模块列表").toArray();
|
||
algorithmlist = station_obj.value("算法列表").toArray();
|
||
for (auto val = 0; val < cameramodulelist.size(); val++)
|
||
{
|
||
QJsonObject obj = cameramodulelist.at(val).toObject();
|
||
array.append(obj);
|
||
}
|
||
}
|
||
|
||
if (array.isEmpty())
|
||
return;
|
||
|
||
try {
|
||
for (int i = 0; i < array.size(); i++)
|
||
{
|
||
QJsonObject obj = array.at(i).toObject();
|
||
//QString type = obj.value("type").toString();
|
||
//if(type.contains("camera"))
|
||
{
|
||
QGraphicsView* view = new QGraphicsView(ui.widget_image);
|
||
// 假设你已经有了一个QGraphicsView对象叫view
|
||
view->setStyleSheet("background-color: rgb(32, 36, 40);border-radius:10px;");
|
||
view->setBackgroundBrush(QColor(32, 36, 40));// (Qt::black);
|
||
view->setRenderHint(QPainter::Antialiasing, false); // 关闭反走样以获得更好的效果
|
||
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||
QPixmap pixmap(20, 20); // 网格块大小为20x20像素
|
||
pixmap.fill(QColor(32, 36, 40)); // 填充灰色作为网格线颜色
|
||
view->setBackgroundBrush(QBrush(pixmap)); // 将网格图像作为背景图案
|
||
QLabel* cmaeraLabel = new QLabel(ui.widget_image);
|
||
QString key = obj.value("相机key").toString(); // key 示例:camera1
|
||
QString cName = obj.value("界面窗口名称").toString(); // 相机名称
|
||
cmaeraLabel->setAlignment(Qt::AlignCenter);
|
||
cmaeraLabel->setText(" 相机名称:" + cName);
|
||
m_Labellist.append(cmaeraLabel);
|
||
cameraKeyList.append(key);
|
||
cNameList.append(cName);
|
||
|
||
view->setMouseTracking(true);
|
||
|
||
QImageWidget* myQImageWidget = nullptr;
|
||
m_pImageList.append(myQImageWidget);
|
||
QGraphicsScene* myqgraphicsScene = new QGraphicsScene;
|
||
qgraphicsSceneList.append(myqgraphicsScene);
|
||
m_Viewlist.append(view);
|
||
|
||
|
||
//当前,相机key界面窗口名称拍照面描述列表
|
||
QStringList mycameraKey_cName_surface;
|
||
int indexNum = obj.value("单通道拍照数").toString().toInt();
|
||
for (int i = 0; i < indexNum; i++)
|
||
mycameraKey_cName_surface.append(key + "#" + cName + "_" + QString::number(i));
|
||
if (mycameraKey_cName_surface.size() > 0)
|
||
cameraKey_cName_surface.enqueue(mycameraKey_cName_surface);
|
||
|
||
}
|
||
}
|
||
|
||
ui.gridLayout->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
|
||
ui.gridLayout->setSpacing(4);
|
||
setLayout(ui.gridLayout);
|
||
}
|
||
catch (QString ev) {
|
||
qCritical() << __FUNCTION__ << " line:" << __LINE__ << " ev:" << ev;
|
||
return ;
|
||
}
|
||
|
||
int listSize = 8;
|
||
int m_row = 0;
|
||
if (m_Viewlist.size() <= 4)
|
||
{
|
||
for (int iii = 0; iii < m_Viewlist.size(); iii++)
|
||
{
|
||
m_row = ui.gridLayout->rowCount()*2;
|
||
if (m_Viewlist.size() - 1 > iii)
|
||
{
|
||
ui.gridLayout->addWidget(m_Labellist.at(iii), m_row, 0);
|
||
ui.gridLayout->addWidget(m_Labellist.at(iii + 1), m_row, 1);
|
||
ui.gridLayout->addWidget(m_Viewlist.at(iii), m_row + 1, 0);
|
||
ui.gridLayout->addWidget(m_Viewlist.at(iii + 1), m_row + 1, 1);
|
||
iii += 1;
|
||
}
|
||
else if (m_Viewlist.size() % 2 != 0 && (m_Viewlist.size() - 1 == iii))
|
||
{
|
||
ui.gridLayout->addWidget(m_Labellist.at(iii), m_row, 0);
|
||
ui.gridLayout->addWidget(m_Viewlist.at(iii), m_row+1, 0);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (int iii = 0; iii < m_Viewlist.size(); iii++)
|
||
{
|
||
m_row = ui.gridLayout->rowCount()*2;
|
||
if (m_Viewlist.size() - 3 >= iii)
|
||
{
|
||
ui.gridLayout->addWidget(m_Labellist.at(iii), m_row, 0);
|
||
ui.gridLayout->addWidget(m_Labellist.at(iii + 1), m_row, 1);
|
||
ui.gridLayout->addWidget(m_Labellist.at(iii + 2), m_row, 2);
|
||
ui.gridLayout->addWidget(m_Viewlist.at(iii), m_row+1, 0);
|
||
ui.gridLayout->addWidget(m_Viewlist.at(iii + 1), m_row+1, 1);
|
||
ui.gridLayout->addWidget(m_Viewlist.at(iii + 2), m_row+1, 2);
|
||
iii += 2;
|
||
}
|
||
else if (m_Viewlist.size() - 2 >= iii)
|
||
{
|
||
ui.gridLayout->addWidget(m_Labellist.at(iii), m_row, 0);
|
||
ui.gridLayout->addWidget(m_Labellist.at(iii + 1), m_row, 1);
|
||
ui.gridLayout->addWidget(m_Viewlist.at(iii), m_row+1, 0);
|
||
ui.gridLayout->addWidget(m_Viewlist.at(iii + 1), m_row+1, 1);
|
||
iii += 1;
|
||
}
|
||
else if (m_Viewlist.size() - 1 >= iii)
|
||
{
|
||
ui.gridLayout->addWidget(m_Labellist.at(iii), m_row, 0);
|
||
ui.gridLayout->addWidget(m_Viewlist.at(iii), m_row + 1, 0);
|
||
}
|
||
}
|
||
}
|
||
|
||
QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||
sizePolicy1.setHorizontalStretch(0);
|
||
sizePolicy1.setVerticalStretch(0);
|
||
sizePolicy1.setHeightForWidth(ui.widget_image->sizePolicy().hasHeightForWidth());
|
||
ui.widget_image->setStyleSheet(QString::fromUtf8("background-color: rgb(50, 55, 60);border-radius:10px;"));
|
||
ui.widget_image->setSizePolicy(sizePolicy1);
|
||
}
|
||
|
||
void setBase_tableWidget(QTableWidget* mtQTableWidget)
|
||
{
|
||
mtQTableWidget->setMouseTracking(true);
|
||
mtQTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); // 整行选中
|
||
mtQTableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(50,55,60);color: rgb(255,255,255);border:0px solid rgb(32,36,40);border-bottom:2px solid rgb(32,36,40);}"); // 设置横向表头背景色
|
||
mtQTableWidget->verticalHeader()->setStyleSheet("QHeaderView::section{background:rgb(50,55,60);color: rgb(255,255,255);}"); // 设置纵向表头背景色
|
||
mtQTableWidget->horizontalHeader()->setSectionsClickable(false);
|
||
mtQTableWidget->verticalHeader()->hide();
|
||
//ui.tableWidget_defectList->setShowGrid(false);
|
||
//ui.tableWidget_defectList->setEditTriggers(QAbstractItemView::NoEditTriggers); // 不可编辑
|
||
//ui.tableWidget_defectList->setFrameShape(QFrame::NoFrame); // 设置无边框
|
||
mtQTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
||
}
|
||
|
||
//自动布局缺陷统计tabwidget
|
||
void Qt_epWindow::adjustDefectWidegt(QJsonObject obj)
|
||
{
|
||
ui.tableWidget_defectList->setColumnCount(3);
|
||
setBase_tableWidget(ui.tableWidget_defectList);
|
||
//ui.tableWidget_defectList->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
|
||
ui.tableWidget_defectList->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||
ui.tableWidget_defectList->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
|
||
|
||
QStringList list;
|
||
list << "序号" << "相机-第几张图" << "缺陷数" ;
|
||
ui.tableWidget_defectList->setHorizontalHeaderLabels(list);
|
||
|
||
int rowNumn = 0;
|
||
for (int i = 0; i < cameraKey_cName_surface.size(); i++)
|
||
for (int j = 0; j < cameraKey_cName_surface[i].size(); j++)
|
||
{
|
||
ui.tableWidget_defectList->insertRow(rowNumn);
|
||
QTableWidgetItem* m_Item0 = new QTableWidgetItem;
|
||
m_Item0->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
m_Item0->setText(QString::number(rowNumn + 1));
|
||
m_Item0->setBackground(QBrush(QColor(32, 36, 40)));
|
||
ui.tableWidget_defectList->setItem(rowNumn, 0, m_Item0);
|
||
|
||
//QString nowTime = QDateTime::currentDateTime().toString("yyyy-MM-dd");
|
||
QTableWidgetItem* m_Item1 = new QTableWidgetItem;
|
||
m_Item1->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
m_Item1->setText(cameraKey_cName_surface[i][j].split("#")[1]);
|
||
m_Item1->setBackground(QBrush(QColor(32, 36, 40)));
|
||
ui.tableWidget_defectList->setItem(rowNumn, 1, m_Item1);
|
||
|
||
QTableWidgetItem* m_Item2 = new QTableWidgetItem;
|
||
m_Item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
m_Item2->setText("0");
|
||
m_Item2->setBackground(QBrush(QColor(32, 36, 40)));
|
||
ui.tableWidget_defectList->setItem(rowNumn, 2, m_Item2);
|
||
rowNumn++;
|
||
cName_surface_defectNums.enqueue(0);
|
||
}
|
||
|
||
showDefectData();
|
||
}
|
||
|
||
|
||
void Qt_epWindow::initWidget()
|
||
{
|
||
//ui.label_icon->setPixmap(QPixmap("./Icon/logo_Dongsheng.png"));
|
||
//border - color: rgb(74, 74, 74);able_widget.setStyleSheet("border: 1px solid black;")border:1px solid rgba(82,130,164,1);
|
||
//缺陷统计表
|
||
ui.tableWidget_defectList->setStyleSheet("QTabWidget#tabWidget{background-color:rgb(74,74,74);border:1px solid rgba(82,130,164,1);}\
|
||
QTabBar::tab{background-color:rgb(74,74,74);}\
|
||
QTabBar::tab::selected{background-color:rgb(0,100,200);}");
|
||
|
||
//历史统计/运行日志、操作日志 //QTabBar::tab{width:0px;height:0px;可以隐藏标题
|
||
ui.tabWidget->setStyleSheet("QTabWidget#tabWidget{background-color:rgb(74,74,74);}\
|
||
QTabBar::tab{width:0px;height:0px;background-color:rgb(74,74,74);}\
|
||
QTabBar::tab::selected{background-color:rgb(0,100,200);}");
|
||
//12H统计表
|
||
ui.tableWidget_24H->horizontalHeader()->setStyleSheet(
|
||
"QHeaderView::section{"
|
||
"border-top:0px solid #E5E5E5;"
|
||
"border-left:0px solid #E5E5E5;"
|
||
"border-right:0.5px solid #E5E5E5;"
|
||
"border-bottom: 0.5px solid #E5E5E5;"
|
||
"background-color:rgb(32,36,40);"
|
||
"padding:4px;"
|
||
"}"
|
||
);
|
||
ui.tableWidget_24H->verticalHeader()->setStyleSheet(
|
||
"QHeaderView::section{"
|
||
"border-top:0px solid #E5E5E5;"
|
||
"border-left:0px solid #E5E5E5;"
|
||
"border-right:0.5px solid #E5E5E5;"
|
||
"border-bottom: 0.5px solid #E5E5E5;"
|
||
"background-color:rgb(32,36,40);"
|
||
"padding:4px;"
|
||
"}"
|
||
);
|
||
|
||
ui.tabWidget->setCurrentIndex(0);
|
||
set_tabQPushButton(0);
|
||
|
||
//历史统计,最大行数;设置太大容易电脑卡顿
|
||
ui.plainTextEdit_history->document()->setMaximumBlockCount(1000);
|
||
//运行日志,最大行数;设置太大容易电脑卡顿
|
||
ui.plainTextEdit_run->document()->setMaximumBlockCount(1000);
|
||
//操作日志,最大行数;设置太大容易电脑卡顿
|
||
ui.plainTextEdit_operat->document()->setMaximumBlockCount(1000);
|
||
|
||
|
||
ui.label_type->setText(" ");
|
||
ui.label_allNum->setText(" ");
|
||
ui.label_OKNum->setText(" ");
|
||
ui.label_NGnum->setText(" ");
|
||
ui.label_OKPercent->setText(" ");
|
||
ui.label_CT -> setText(" ");
|
||
ui.label_runTime->setText(" ");
|
||
|
||
|
||
ui.label_allNum_day->setText(" ");
|
||
ui.label_OKNum_day->setText(" ");
|
||
ui.label_NGnum_day->setText(" ");
|
||
ui.label_OKPercent_day->setText(" ");
|
||
|
||
ui.label_allNum_night->setText(" ");
|
||
ui.label_OKNum_night->setText(" ");
|
||
ui.label_NGnum_night->setText(" ");
|
||
ui.label_OKPercent_night->setText(" ");
|
||
|
||
|
||
static QTimer* runTimer = new QTimer;
|
||
runTimer->setInterval(1000);//50ms时,数据太多,if (image)崩溃
|
||
static int runSecond = 0;
|
||
connect(runTimer, &QTimer::timeout, this, [=]() {
|
||
runSecond++;
|
||
int h = runSecond / 3600;
|
||
int m = (runSecond % 3600 )/ 60;
|
||
int s = (runSecond % 3600) % 60;
|
||
ui.label_runTime->setText(QString::number(h) + "小时" + QString::number(m) + "分钟" + QString::number(s) + "秒");
|
||
});
|
||
runTimer->start();
|
||
|
||
|
||
logLock = new QMutex;
|
||
//showMutex = new QMutex;
|
||
initWidegt24H();
|
||
|
||
ui.widget_QPie->hide();
|
||
restQPieSeries(QPieSeriesData_ALL);
|
||
ui.groupBox_2->layout()->addWidget(QPieSeriesData_ALL.chartView);
|
||
|
||
//ui.widget_QPie_day->hide();
|
||
restQPieSeries(QPieSeriesData_day);
|
||
ui.groupBox_3->layout()->addWidget(QPieSeriesData_day.chartView);
|
||
QPieSeriesData_day.chartView->hide(); //饼图
|
||
ui.tableWidget_day->hide(); //表格
|
||
|
||
//ui.widget_QPie_night->hide();
|
||
restQPieSeries(QPieSeriesData_night);
|
||
ui.groupBox_4->layout()->addWidget(QPieSeriesData_night.chartView);
|
||
QPieSeriesData_night.chartView->hide();
|
||
ui.tableWidget_night->hide();
|
||
|
||
restQBarSeries(QBarSeriesData_day,0);
|
||
ui.groupBox_3->layout()->addWidget(QBarSeriesData_day.chartView);
|
||
restQBarSeries(QBarSeriesData_night,0);
|
||
ui.groupBox_4->layout()->addWidget(QBarSeriesData_night.chartView);
|
||
}
|
||
|
||
//重置饼状图
|
||
void Qt_epWindow::restQPieSeries(QPieSeriesData& mQPieSeriesData)
|
||
{
|
||
mQPieSeriesData.m_chart = new QChart();
|
||
mQPieSeriesData.series = new QPieSeries();
|
||
mQPieSeriesData.series->append("OK:100%", 100);
|
||
mQPieSeriesData.series->append("NG:0%", 0);
|
||
mQPieSeriesData.series->setLabelsVisible(false);
|
||
mQPieSeriesData.series->setUseOpenGL(false);
|
||
mQPieSeriesData.series->slices().at(1)->setColor(QColor(255, 0, 0));//RGB
|
||
mQPieSeriesData.series->slices().at(1)->setLabelColor(QColor(255, 0, 0));
|
||
mQPieSeriesData.series->slices().at(0)->setColor(QColor(0, 255, 0));
|
||
mQPieSeriesData.series->slices().at(0)->setLabelColor(QColor(0, 255, 0));
|
||
mQPieSeriesData.series->slices().at(mQPieSeriesData.series->slices().count() - 1)->setExploded(false);
|
||
mQPieSeriesData.series->slices().at(mQPieSeriesData.series->slices().count() - 2)->setExploded(false);
|
||
mQPieSeriesData.m_chart->setTheme(QChart::ChartThemeDark);//设置黑色主题
|
||
mQPieSeriesData.m_chart->setDropShadowEnabled(true);
|
||
mQPieSeriesData.m_chart->setBackgroundVisible(false);
|
||
mQPieSeriesData.m_chart->addSeries(mQPieSeriesData.series);
|
||
mQPieSeriesData.m_chart->legend()->hide();
|
||
mQPieSeriesData.chartView = new QChartView(mQPieSeriesData.m_chart);
|
||
mQPieSeriesData.chartView->setRenderHint(QPainter::Antialiasing);
|
||
}
|
||
|
||
//重置柱状图
|
||
void Qt_epWindow::restQBarSeries(QBarSeriesData& mQBarSeriesData, int myValue)
|
||
{
|
||
mQBarSeriesData.m_QBarSet = new QBarSet("缺陷数"); //在showDefectData()更新
|
||
mQBarSeriesData.lastMax = (myValue / mQBarSeriesData.reFreshValue + 1) * 2 * mQBarSeriesData.reFreshValue;
|
||
mQBarSeriesData.m_QBarSet->append(mQBarSeriesData.lastMax);
|
||
mQBarSeriesData.m_QBarSeries = new QBarSeries();
|
||
mQBarSeriesData.m_QBarSeries->append(mQBarSeriesData.m_QBarSet);
|
||
mQBarSeriesData.m_chart = new QChart();
|
||
mQBarSeriesData.m_chart->addSeries(mQBarSeriesData.m_QBarSeries);
|
||
//mQBarSeriesData.m_chart->setTitle("缺陷统计");
|
||
//mQBarSeriesData.m_chart->setAnimationOptions(QChart::SeriesAnimations);
|
||
mQBarSeriesData.chartView = new QChartView(mQBarSeriesData.m_chart);
|
||
//QStringList categories;
|
||
//categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun"; //保存横坐标字符串的列表
|
||
mQBarSeriesData.axis = new QBarCategoryAxis();
|
||
//mQBarSeriesData.axis->append(categories); ////在showDefectData()更新
|
||
mQBarSeriesData.m_chart->createDefaultAxes(); //创建一个默认的坐标轴
|
||
mQBarSeriesData.m_chart->setAxisX(mQBarSeriesData.axis, mQBarSeriesData.m_QBarSeries); //设置X坐标轴
|
||
mQBarSeriesData.m_QBarSeries->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd); //设置标签显示的位置
|
||
mQBarSeriesData.m_QBarSeries->setLabelsVisible(true); //设置数据标签可见
|
||
mQBarSeriesData.m_chart->setTheme(QChart::ChartThemeBlueCerulean); //给表格设置一个主题
|
||
mQBarSeriesData.m_chart->legend()->setAlignment(Qt::AlignBottom); //图例的位置设置到下方
|
||
mQBarSeriesData.m_chart->legend()->setVisible(false);
|
||
mQBarSeriesData.m_QBarSet->replace(0, 0);
|
||
}
|
||
|
||
|
||
//总投入,良品数,良品率,不良数,不良率
|
||
//初始化24小时统计
|
||
void Qt_epWindow::initWidegt24H()
|
||
{
|
||
QString nowTime = QDateTime::currentDateTime().toString("yyyy-MM-dd#hh:mm:ss.zzz");
|
||
static QString lasthh = nowTime.split("#")[1].split(":")[0];// [2] .split(".")[0];秒
|
||
for (int i = 0; i < 24; i++)
|
||
{
|
||
for (int j = 1; j < 6; j++)
|
||
{
|
||
QTableWidgetItem* m_Item2 = new QTableWidgetItem;
|
||
m_Item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
m_Item2->setText(" ");
|
||
ui.tableWidget_24H->setItem(i + 1, j, m_Item2);
|
||
}
|
||
}
|
||
//lasthh = "";
|
||
showTimer24H = new QTimer;
|
||
showTimer24H->setInterval(500);
|
||
hour_allNum12.clear();
|
||
hour_OKNum12.clear();
|
||
lasthour_allNum12 = 0;
|
||
lasthour_OKNum12 = 0;
|
||
connect(showTimer24H, &QTimer::timeout, this, [=]() {
|
||
/*if (lastAllNum == ui.label_allNum->text().toInt())
|
||
return;
|
||
else*/
|
||
lastAllNum = ui.label_allNum->text().toInt();
|
||
QString nowTime = QDateTime::currentDateTime().toString("yyyy-MM-dd#hh:mm:ss.zzz");
|
||
QString thishh = nowTime.split("#")[1].split(":")[0];// [2] .split(".")[0];// [2] ;秒
|
||
//thishh = QString::number(thishh.toInt() % 24);
|
||
if (thishh != lasthh)//新时间
|
||
{
|
||
int lastallNum = ui.label_allNum->text().toInt() - lasthour_allNum12;
|
||
int lastOKnum = ui.label_OKNum->text().toInt()- lasthour_OKNum12;
|
||
//上个时间更新
|
||
ui.tableWidget_24H->item(lasthh.toInt() + 1, 1)->setText(QString::number(lastallNum)); //总投入数
|
||
ui.tableWidget_24H->item(lasthh.toInt() + 1, 2)->setText(QString::number(lastOKnum)); //OK数
|
||
if (lastallNum != 0) //OK率
|
||
ui.tableWidget_24H->item(lasthh.toInt() + 1, 3)->setText(QString::number(int(lastOKnum * 10000 / lastallNum) * 0.01) + "%");
|
||
else
|
||
{
|
||
ui.tableWidget_24H->item(lasthh.toInt() + 1, 4)->setText("0"); //NG数
|
||
ui.tableWidget_24H->item(lasthh.toInt() + 1, 5)->setText(""); //NG率
|
||
}
|
||
ui.tableWidget_24H->item(lasthh.toInt() + 1, 4)->setText(QString::number(lastallNum-lastOKnum)); //NG数
|
||
if (lastallNum != 0) //NG率
|
||
ui.tableWidget_24H->item(lasthh.toInt() + 1, 5)->setText(QString::number(100.00-int(lastOKnum * 10000 / lastallNum) * 0.01) + "%");
|
||
|
||
lasthh = thishh;
|
||
//下个时间清0
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 1)->setText(QString::number(0)); //总投入数
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 2)->setText(QString::number(0)); //OK数
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 3)->setText("");//OK率
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 4)->setText("0"); //NG数
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 5)->setText("");//NG率
|
||
|
||
|
||
/*ui.tableWidget_12H->item(1, hour_allNum12.size())->setText(QString::number(lastallNum));
|
||
ui.tableWidget_12H->item(2, hour_allNum12.size())->setText(QString::number(lastOKnum));
|
||
if (lastallNum != 0)
|
||
ui.tableWidget_12H->item(3, hour_allNum12.size())->setText(QString::number(int(lastOKnum * 10000 / lastallNum) * 0.01) + "%");*/
|
||
|
||
hour_allNum12.enqueue(lastallNum);
|
||
hour_OKNum12.enqueue(lastOKnum);
|
||
if (hour_allNum12.size() > 24)
|
||
{
|
||
hour_allNum12.dequeue();
|
||
hour_OKNum12.dequeue();
|
||
|
||
////更新表头
|
||
//{
|
||
// for (int i = 0; i < 11; i++)
|
||
// {
|
||
// ui.tableWidget_12H->item(0, i + 1)->setText(ui.tableWidget_12H->item(0, i + 2)->text());
|
||
// ui.tableWidget_12H->item(1, i + 1)->setText(ui.tableWidget_12H->item(1, i + 2)->text());
|
||
// ui.tableWidget_12H->item(2, i + 1)->setText(ui.tableWidget_12H->item(2, i + 2)->text());
|
||
// ui.tableWidget_12H->item(3, i + 1)->setText(ui.tableWidget_12H->item(3, i + 2)->text());
|
||
// }
|
||
// ui.tableWidget_12H->item(0, 11 + 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
// if (thishh.toInt() > 23)
|
||
// ui.tableWidget_12H->item(0, 11 + 1)->setText(QString::number((thishh.toInt()) % 24) + "H");
|
||
// else
|
||
// ui.tableWidget_12H->item(0, 11 + 1)->setText(QString::number(thishh.toInt()) + "H");
|
||
//}
|
||
}
|
||
/*for (int i = hour_allNum12.size()-1; i > 0; i--)
|
||
{
|
||
ui.tableWidget_12H->item(1, i+1)->setText(QString::number(hour_allNum12[i]));
|
||
ui.tableWidget_12H->item(2, i+1)->setText(QString::number(hour_OKNum12[i]));
|
||
if (hour_allNum12[i] == 0)
|
||
continue;
|
||
ui.tableWidget_12H->item(3, i+1)->setText(QString::number(int(hour_OKNum12[i] * 10000 / hour_allNum12[i]) * 0.01) + "%");
|
||
|
||
}*/
|
||
if (hour_allNum12.last() == 0)
|
||
return;
|
||
if (hour_allNum12.last() < 0)
|
||
qDebug() << "hour_allNum12.last()<0";
|
||
//ui.tableWidget_12H->item(1, hour_allNum12.size())->setText("");//QString::number(hour_allNum12.last()));
|
||
//ui.tableWidget_12H->item(2, hour_allNum12.size())->setText("");// QString::number(hour_OKNum12.last()));
|
||
//ui.tableWidget_12H->item(3, hour_allNum12.size())->setText("");// QString::number(int(hour_OKNum12.last() * 10000 / hour_allNum12.last()) * 0.01) + "%");
|
||
lasthour_allNum12 = ui.label_allNum->text().toInt();
|
||
lasthour_OKNum12 = ui.label_OKNum->text().toInt();
|
||
}
|
||
else
|
||
{
|
||
if(hour_allNum12.size()==0)
|
||
{
|
||
hour_allNum12.enqueue(ui.label_allNum->text().toInt() - lasthour_allNum12);
|
||
hour_OKNum12.enqueue(ui.label_OKNum->text().toInt() - lasthour_OKNum12);
|
||
}
|
||
if (hour_allNum12.size() > 24)
|
||
{
|
||
hour_allNum12.dequeue();
|
||
hour_OKNum12.dequeue();
|
||
}
|
||
|
||
hour_allNum12.last() = ui.label_allNum->text().toInt() - lasthour_allNum12;
|
||
hour_OKNum12.last() = ui.label_OKNum->text().toInt() - lasthour_OKNum12;
|
||
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 1)->setText(QString::number(hour_allNum12.last()));//投入数
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 2)->setText(QString::number(hour_OKNum12.last()));//OK数
|
||
if (hour_allNum12.last() != 0)//OK率
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 3)->setText(QString::number(int(hour_OKNum12.last() * 10000 / hour_allNum12.last()) * 0.01) + "%");
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 4)->setText(QString::number(hour_allNum12.last()-hour_OKNum12.last()));//NG数
|
||
if (hour_allNum12.last() != 0)//NG率
|
||
ui.tableWidget_24H->item(thishh.toInt() + 1, 5)->setText(QString::number(100.00 - int(hour_OKNum12.last() * 10000 / hour_allNum12.last()) * 0.01) + "%");
|
||
|
||
|
||
|
||
/*ui.tableWidget_12H->item(1, hour_allNum12.size())->setText(QString::number(hour_allNum12.last()));
|
||
ui.tableWidget_12H->item(2, hour_allNum12.size())->setText(QString::number(hour_OKNum12.last()));
|
||
if (hour_allNum12.last() == 0)
|
||
return;
|
||
ui.tableWidget_12H->item(3, hour_allNum12.size())->setText(QString::number(int(hour_OKNum12.last() * 10000 / hour_allNum12.last()) * 0.01) + "%");*/
|
||
|
||
if (hour_allNum12.last() < 0)
|
||
qDebug() << "hour_allNum12.last()<0";
|
||
/*lasthour_allNum12 = ui.label_allNum->text().toInt();
|
||
lasthour_OKNum12 = ui.label_OKNum_percent->text().split("/")[0].toInt();*/
|
||
}
|
||
|
||
|
||
|
||
|
||
});
|
||
showTimer24H->start();
|
||
}
|
||
|
||
void Qt_epWindow::setTools()
|
||
{
|
||
ui.pushButton_LogTool->setStyleSheet("QPushButton{image: url(./Icon/4.Log分析.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_LogTool, &QPushButton::clicked, this, [=]() {
|
||
qDebug() << "打开:工具-Log分析";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "打开工具:工具-Log分析.exe");
|
||
QProcess::startDetached("工具-Log分析.exe");
|
||
});
|
||
|
||
ui.pushButton_cfgTool->setStyleSheet("QPushButton{image: url(./Icon/5.配置文件.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_cfgTool, &QPushButton::clicked, this, [=]() {
|
||
qDebug() << "打开:工具-配置文件";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "打开工具:工具-配置文件.exe");
|
||
QProcess::startDetached("工具-配置文件.exe");
|
||
});
|
||
|
||
ui.pushButton_sendPLCTool->setStyleSheet("QPushButton{image: url(./Icon/6.手动补信号.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_sendPLCTool, &QPushButton::clicked, this, [=]() {
|
||
qDebug() << "打开:手动补信号";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "打开工具:工具-手动补信号,子窗口");
|
||
if (myQtSendPLC == nullptr)
|
||
{
|
||
myQtSendPLC = new QtSendPLC;
|
||
connect(myQtSendPLC, &QtSendPLC::sendPLC, this, &Qt_epWindow::sendPLCData);
|
||
}
|
||
myQtSendPLC->setData(programObj.value("手动补信号").toArray());
|
||
//myQtHistoryLogList->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
|
||
//myQtSendPLC->setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
||
myQtSendPLC->show();
|
||
});
|
||
|
||
ui.pushButton_historyList->setStyleSheet("QPushButton{image: url(./Icon/7.历史统计分析.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_historyList, &QPushButton::clicked, this, [=]() {
|
||
qDebug() << "打开:工具-历史统计分析";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "打开:工具-历史统计分析");
|
||
if (myQtHistoryLogList == nullptr)
|
||
myQtHistoryLogList = new QtHistoryLogList;
|
||
myQtHistoryLogList->setData(historyLogList);
|
||
//myQtHistoryLogList->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
|
||
myQtHistoryLogList->setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
||
myQtHistoryLogList->show();
|
||
});
|
||
|
||
ui.pushButton_resultImgTool->setStyleSheet("QPushButton{image: url(./Icon/23.1.查看图片.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_resultImgTool, &QPushButton::clicked, this, [=]() {
|
||
qDebug() << "打开:工具-查看结果图";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "打开工具:工具-查看结果图.exe");
|
||
QProcess::startDetached("工具-查看结果图.exe");
|
||
});
|
||
}
|
||
|
||
|
||
void Qt_epWindow::sendPLCData(QString cmd)
|
||
{
|
||
if (cmd.contains("补全部信号"))
|
||
{
|
||
sendPLCcmd = cmd.split("#"); //补全部信号#指令1#指令2...
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "手动补信号:补全部信号");
|
||
for (int i = 1; i < sendPLCcmd.size(); i++)
|
||
{
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "手动补信号:" + sendPLCcmd[i]);
|
||
my_Logic_transfer->sendPLC(sendPLCcmd[i]);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "手动补信号:" + cmd);
|
||
my_Logic_transfer->sendPLC(cmd);
|
||
}
|
||
}
|
||
|
||
//重新加载json设置到Logic_transfer
|
||
bool Qt_epWindow::reLoadJsonSetTask()
|
||
{
|
||
//开放接口,可以根据此方式,实现产品切换(不同的配置文件)
|
||
programObj = my_Logic_transfer->load_camera_cfg(cfgName);//1、加载配置文件
|
||
QString cfg_errMessage;
|
||
bool ifCfgOK = my_Logic_transfer->checkJsonObject(programObj, cfg_errMessage); //2、配置文件检查
|
||
QMessageBox* myBox = new QMessageBox;
|
||
if (ifCfgOK == false) { myBox->information(this, "camera_cfg错误", cfg_errMessage); return false; }
|
||
else
|
||
{
|
||
my_Logic_transfer->setJsonObject(programObj); //3、传递配置文件到程序
|
||
}
|
||
}
|
||
|
||
void Qt_epWindow::pushButtonS()
|
||
{
|
||
ui.pushButton_CameraStatus->setStyleSheet("QPushButton{ background-color: rgb(255, 0, 0);}");
|
||
ui.pushButton_PLCstatus->setStyleSheet("QPushButton{ background-color: rgb(255, 0, 0);}");
|
||
|
||
//运行按钮
|
||
ui.pushButton_start->setStyleSheet("QPushButton{image: url(./Icon/4.1.项目运行.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_start, &QPushButton::clicked, [=]() {
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "开始按钮按下,加载通用逻辑并运行");
|
||
qApp->processEvents();
|
||
bool ifCfgOK = startLogic_transfer();// my_Logic_transfer->startTask();//5、开始任务
|
||
QMessageBox* myBox = new QMessageBox;
|
||
if (ifCfgOK == false)
|
||
{
|
||
myBox->information(this, "startTask错误", "startTask失败,请阅读Log日志进行分析");
|
||
ui.label_15->setText("初始化失败");
|
||
ui.label_15->setStyleSheet("color: red;");
|
||
return;
|
||
}
|
||
|
||
ui.pushButton_CameraStatus->setStyleSheet("QPushButton{ background-color: rgb(0, 255, 0); }");
|
||
ui.pushButton_PLCstatus->setStyleSheet("QPushButton{ background-color: rgb(0, 255, 0); }");
|
||
|
||
//ui.pushButton_set->hide();
|
||
//ui.pushButton_operator->hide();
|
||
ui.label_15->setText("程序运行");
|
||
ui.label_15->setStyleSheet("color: green;");
|
||
ui.pushButton_start->setStyleSheet("QPushButton{image: url(./Icon/4.6.项目运行.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
ui.pushButton_stop->setStyleSheet("QPushButton{image: url(./Icon/6.1.项目停止.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
});
|
||
//停止
|
||
ui.pushButton_stop->setStyleSheet("QPushButton{image: url(./Icon/6.1.项目停止.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_stop, &QPushButton::pressed, [=]() {
|
||
if (clock() - pressStart < 100)//clicked检查,需要在软件空闲时才有反应;pressed检查有时会连续触发两次信号
|
||
return;
|
||
pressStart = clock();
|
||
QMessageBox::StandardButton result = QMessageBox::question(this, "确认停止?", "确认停止:清除所有容器数据?");
|
||
if (result == QMessageBox::No)
|
||
{
|
||
qDebug() << "停止,取消";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "停止,取消");
|
||
return;
|
||
}
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "停止按钮按下,清除所有容器数据");
|
||
qApp->processEvents();
|
||
bool ifCfgOK = my_Logic_transfer->stopTask();//6、停止任务
|
||
stopLogic_transfer();
|
||
QMessageBox* myBox = new QMessageBox;
|
||
if (ifCfgOK == false) { myBox->information(this, "stopTask错误", "stopTask失败,请阅读Log日志进行分析"); return; }
|
||
if (myauthority_user.contains("管理员"))
|
||
ui.pushButton_set->show();
|
||
ui.pushButton_operator->show();
|
||
|
||
ui.label_15->setText("程序停止..");
|
||
ui.label_15->setStyleSheet("color: red;");
|
||
ui.pushButton_stop->setStyleSheet("QPushButton{image: url(./Icon/6.5.项目停止.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
ui.pushButton_start->setStyleSheet("QPushButton{image: url(./Icon/4.1.项目运行.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
});
|
||
//重新运行
|
||
ui.pushButton_reStart->setStyleSheet("QPushButton{image: url(./Icon/3.重新运行.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_reStart, &QPushButton::clicked, [=]() {
|
||
QMessageBox::StandardButton result = QMessageBox::question(this, "确认重新运行?", "确认重新运行:卸载任务并重新加载通用逻辑后运行?");
|
||
if (result == QMessageBox::No)
|
||
{
|
||
qDebug() << "重新运行,取消";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "重新运行,取消");
|
||
return;
|
||
}
|
||
ui.pushButton_CameraStatus->setStyleSheet("QPushButton{ background-color: rgb(255, 0, 0); }");
|
||
ui.pushButton_PLCstatus->setStyleSheet("QPushButton{ background-color: rgb(255, 0, 0); }");
|
||
ui.label_15->setText("重新运行...");
|
||
ui.label_15->setStyleSheet("color: yellow;");
|
||
ui.pushButton_start->setStyleSheet("QPushButton{image: url(./Icon/4.1.项目运行.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
|
||
qDebug() << "重新运行,卸载任务并重新加载通用逻辑后运行";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "重新运行按钮按下,卸载任务并重新加载通用逻辑后运行");
|
||
qApp->processEvents();
|
||
my_Logic_transfer->disconnect();
|
||
my_Logic_transfer->exitTask();
|
||
ifStopLogic_transfer = false;
|
||
bool ifCfgOK = setLogic_transfer();
|
||
|
||
QMessageBox* myBox = new QMessageBox;
|
||
if (ifCfgOK == false)
|
||
{
|
||
myBox->information(this, "startTask错误", "startTask失败,请阅读Log日志进行分析");
|
||
ui.label_15->setText("初始化失败");
|
||
ui.label_15->setStyleSheet("color: red;");
|
||
return;
|
||
}
|
||
//ui.pushButton_set->hide();
|
||
//ui.pushButton_operator->hide();
|
||
ui.label_15->setText("程序运行");
|
||
ui.label_15->setStyleSheet("color: green;");
|
||
|
||
ui.pushButton_CameraStatus->setStyleSheet("QPushButton{ background-color: rgb(0, 255, 0); }");
|
||
ui.pushButton_PLCstatus->setStyleSheet("QPushButton{ background-color: rgb(0, 255, 0); }");
|
||
ui.pushButton_stop->setStyleSheet("QPushButton{image: url(./Icon/6.1.项目停止.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
ui.pushButton_start->setStyleSheet("QPushButton{image: url(./Icon/4.1.项目运行.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
|
||
//bool ifCfgOK = my_Logic_transfer->restartTask();//5、开始任务
|
||
//QMessageBox* myBox = new QMessageBox;
|
||
//if (ifCfgOK == false) { myBox->information(this, "restartTask错误", "restartTask失败,请阅读Log日志进行分析"); return; }
|
||
});
|
||
//connect(ui.pushButton_set, &QPushButton::pressed, this, &Qt_epWindow::pushButton_set_clicked);
|
||
//参数设置
|
||
ui.pushButton_set->setStyleSheet("QPushButton{image: url(./Icon/9.参数设置.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_set, &QPushButton::clicked, [=]() {
|
||
if (ui.label_operator->text().contains("操作员"))
|
||
{
|
||
QMessageBox* myBox = new QMessageBox;
|
||
myBox->information(this, "无权限", "当前为操作员,请切换为管理员进行操作。");
|
||
return;
|
||
}
|
||
|
||
qDebug() << "打开:工具-参数设置";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "打开工具:工具-参数设置");
|
||
//QProcess::startDetached("工具-参数设置.exe");
|
||
if (myParameterSettings == nullptr)
|
||
{
|
||
myParameterSettings = new QtParameterSettings;
|
||
connect(myParameterSettings, &QtParameterSettings::reLoadJsonSetParameter, [=](QStringList moduleKeyList)
|
||
{
|
||
if (moduleKeyList.isEmpty())return;
|
||
reLoadJsonSetTask();
|
||
my_Logic_transfer->reLoadJsonSetParameter(moduleKeyList);
|
||
});
|
||
}
|
||
|
||
cfgName = "camera_cfg.json";
|
||
if (programNum == 2)
|
||
cfgName = "camera_cfg2.json";
|
||
QJsonObject obj =myParameterSettings->load_camera_cfg(cfgName);
|
||
myParameterSettings->initWindow(obj);
|
||
|
||
myParameterSettings->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
|
||
myParameterSettings->setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
||
myParameterSettings->show();
|
||
});
|
||
|
||
//缺陷名称设置
|
||
ui.pushButton_DefectName->setStyleSheet("QPushButton{image: url(./Icon/9.参数设置.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_DefectName, &QPushButton::clicked, this, [=]() {
|
||
if (ui.label_operator->text().contains("操作员"))
|
||
{
|
||
QMessageBox* myBox = new QMessageBox;
|
||
myBox->information(this, "无权限", "当前为操作员,请切换为管理员进行操作。");
|
||
return;
|
||
}
|
||
qDebug() << "打开:缺陷名称设置";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "打开工具:工具-存图设置,子窗口");
|
||
if (myQtDefectSet == nullptr)
|
||
{
|
||
myQtDefectSet = new QtDefectSet;
|
||
connect(myQtDefectSet, &QtDefectSet::reLoadJsonSetParameter, [=](QStringList moduleKeyList)
|
||
{
|
||
if (moduleKeyList.isEmpty())return;
|
||
reLoadJsonSetTask();
|
||
my_Logic_transfer->reLoadJsonSetParameter(moduleKeyList);
|
||
|
||
//缺陷计数
|
||
//解析
|
||
//刷新显示
|
||
showDefectData();
|
||
});
|
||
}
|
||
myQtDefectSet->setJsonName(cfgName);
|
||
myQtDefectSet->show();
|
||
});
|
||
|
||
|
||
//存图设置
|
||
ui.pushButton_SaveImgSet->setStyleSheet("QPushButton{image: url(./Icon/22.阴影校正小.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_SaveImgSet, &QPushButton::clicked, this, [=]() {
|
||
if (ui.label_operator->text().contains("操作员"))
|
||
{
|
||
QMessageBox* myBox = new QMessageBox;
|
||
myBox->information(this, "无权限", "当前为操作员,请切换为管理员进行操作。");
|
||
return;
|
||
}
|
||
qDebug() << "打开:存图设置";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "打开工具:工具-存图设置,子窗口");
|
||
if (myQtSaveImgSet == nullptr)
|
||
{
|
||
myQtSaveImgSet = new QtSaveImgSet;
|
||
connect(myQtSaveImgSet, &QtSaveImgSet::reLoadJsonSetParameter, [=](QStringList moduleKeyList)
|
||
{
|
||
if (moduleKeyList.isEmpty())return;
|
||
reLoadJsonSetTask();
|
||
my_Logic_transfer->reLoadJsonSetParameter(moduleKeyList);
|
||
});
|
||
}
|
||
myQtSaveImgSet->setJsonName(cfgName);
|
||
myQtSaveImgSet->show();
|
||
|
||
|
||
});
|
||
|
||
|
||
//权限切换
|
||
ui.pushButton_operator->setStyleSheet("QPushButton{image: url(./Icon/10.切换权限.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_operator, &QPushButton::clicked, [=]() {
|
||
qDebug() << "打开:密码登录界面";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "打开工具:密码登录界面");
|
||
myQtPassword->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
|
||
myQtPassword->setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
||
myQtPassword->show();
|
||
});
|
||
|
||
//相机调试工具
|
||
ui.pushButton_cameraDebug->setStyleSheet("QPushButton{image: url(./Icon/0.相机模块.png);}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
connect(ui.pushButton_cameraDebug, &QPushButton::clicked, [=]() {
|
||
if (ui.label_operator->text().contains("操作员"))
|
||
{
|
||
QMessageBox* myBox = new QMessageBox;
|
||
myBox->information(this, "无权限", "当前为操作员,请切换为管理员进行操作。");
|
||
return;
|
||
}
|
||
QMessageBox::StandardButton result = QMessageBox::question(this, "开始相机调试?", "开始相机调试:断开通信、卸载任务并开始相机调试?");
|
||
if (result == QMessageBox::No)
|
||
{
|
||
qDebug() << "开始相机调试,取消";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "开始相机调试,取消");
|
||
return;
|
||
}
|
||
ui.label_15->setText("相机调试..");
|
||
ui.label_15->setStyleSheet("color: red;");
|
||
ui.tabWidget->setCurrentIndex(4);
|
||
set_tabQPushButton(4);
|
||
setInsertTextColor(ui.plainTextEdit_operat, QColor("red"));
|
||
|
||
qDebug() << "开始相机调试:断开通信、卸载任务并开始相机调试。";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "开始相机调试:断开通信、卸载任务并开始相机调试。");
|
||
qApp->processEvents();
|
||
my_Logic_transfer->exitTask();
|
||
|
||
if (myQtCameraDebug == nullptr)
|
||
{
|
||
myQtCameraDebug = new QtCameraDebug;
|
||
connect(myQtCameraDebug, &QtCameraDebug::QtCameraDebug_done, [=]() {
|
||
qDebug() << "相机调试完成:连接通信、加载任务并运行。";
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "相机调试完成:连接通信、加载任务。");
|
||
initLogic_transfer_OK = initLogic_transfer();
|
||
if (initLogic_transfer_OK == true)
|
||
{
|
||
|
||
ui.label_15->setText("初始化成功\r\n待运行");
|
||
ui.label_15->setStyleSheet("color: yellow;");
|
||
}
|
||
else
|
||
{
|
||
ui.label_15->setText("初始化失败");
|
||
ui.label_15->setStyleSheet("color: red;");
|
||
}
|
||
setInsertTextColor(ui.plainTextEdit_operat, QColor("white"));
|
||
ui.tabWidget->setCurrentIndex(0);
|
||
set_tabQPushButton(0);
|
||
});
|
||
}
|
||
|
||
myQtCameraDebug->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
|
||
myQtCameraDebug->setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
||
myQtCameraDebug->show();
|
||
|
||
});
|
||
//白夜班统计
|
||
//connect(ui.pushButton_tab_history_2, &QPushButton::pressed, [=]() {
|
||
// set_tabQPushButton(0);
|
||
// });
|
||
//历史统计
|
||
connect(ui.pushButton_tab_history, &QPushButton::pressed, [=]() {
|
||
set_tabQPushButton(0);
|
||
});
|
||
//缺陷统计
|
||
connect(ui.pushButton_tab_defectList, &QPushButton::pressed, [=]() {
|
||
set_tabQPushButton(1);
|
||
});
|
||
//24H统计
|
||
connect(ui.pushButton_tab_24H, &QPushButton::pressed, [=]() {
|
||
set_tabQPushButton(2);
|
||
});
|
||
//运行日志
|
||
connect(ui.pushButton_tab_run, &QPushButton::pressed, [=]() {
|
||
set_tabQPushButton(3);
|
||
});
|
||
//操作日志
|
||
connect(ui.pushButton_tab_operat, &QPushButton::pressed, [=]() {
|
||
set_tabQPushButton(4);
|
||
});
|
||
|
||
|
||
ui.pushButton_clearData->setStyleSheet("QPushButton{background-color: rgb(101, 103, 100);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 100, 255); border:none; color:rgb(255, 255, 255); }");
|
||
//清空数据
|
||
connect(ui.pushButton_clearData, &QPushButton::clicked, [=]() {
|
||
QMessageBox::StandardButton result = QMessageBox::question(this, "清空数据?", "确定清空数据?");
|
||
if (result == QMessageBox::Yes)
|
||
{
|
||
runLogList.clear();
|
||
historyLogList.clear();
|
||
|
||
hour_allNum12.clear();
|
||
hour_OKNum12.clear();
|
||
lasthour_allNum12 = 0;
|
||
lasthour_OKNum12 = 0;
|
||
cName_surface_defectNums.clear();
|
||
|
||
ui.plainTextEdit_history->clear();
|
||
ui.plainTextEdit_run->clear();
|
||
ui.plainTextEdit_operat->clear();
|
||
|
||
//ui.label_type->setText(" ");
|
||
ui.label_allNum->setText(" ");
|
||
ui.label_OKNum->setText(" ");
|
||
ui.label_NGnum->setText(" ");
|
||
ui.label_CT->setText(" ");
|
||
ui.label_runTime->setText(" ");
|
||
ui.label_SN->setText(" ");
|
||
ui.label_OKPercent->setText(" ");
|
||
|
||
ui.label_allNum_day->setText(" ");
|
||
ui.label_OKNum_day->setText(" ");
|
||
ui.label_NGnum_day->setText(" ");
|
||
ui.label_OKPercent_day->setText(" ");
|
||
|
||
ui.label_allNum_night->setText(" ");
|
||
ui.label_OKNum_night->setText(" ");
|
||
ui.label_NGnum_night->setText(" ");
|
||
ui.label_OKPercent_night->setText(" ");
|
||
|
||
QPieSeriesData_ALL.allNum = 0;
|
||
QPieSeriesData_ALL.okNum = 0;
|
||
QPieSeriesData_ALL.ngNum = 0;
|
||
QPieSeriesData_ALL.series->slices()[0]->setValue(100);
|
||
QPieSeriesData_ALL.series->slices()[1]->setValue(0);
|
||
|
||
QPieSeriesData_day.allNum = 0;
|
||
QPieSeriesData_day.okNum = 0;
|
||
QPieSeriesData_day.ngNum = 0;
|
||
QPieSeriesData_day.series->slices()[0]->setValue(100);
|
||
QPieSeriesData_day.series->slices()[1]->setValue(0);
|
||
|
||
QPieSeriesData_night.allNum = 0;
|
||
QPieSeriesData_night.okNum = 0;
|
||
QPieSeriesData_night.ngNum = 0;
|
||
QPieSeriesData_night.series->slices()[0]->setValue(100);
|
||
QPieSeriesData_night.series->slices()[1]->setValue(0);
|
||
|
||
for (int i = 0; i < 24; i++)
|
||
{
|
||
for (int j = 1; j < 6; j++)
|
||
{
|
||
QTableWidgetItem* m_Item2 = new QTableWidgetItem;
|
||
m_Item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
m_Item2->setText(" ");
|
||
ui.tableWidget_24H->setItem(i + 1, j, m_Item2);
|
||
}
|
||
}
|
||
int rowNumn = 0;
|
||
for (int i = 0; i < cameraKey_cName_surface.size(); i++)
|
||
for (int j = 0; j < cameraKey_cName_surface[i].size(); j++)
|
||
{
|
||
QTableWidgetItem* m_Item2 = new QTableWidgetItem;
|
||
m_Item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
m_Item2->setText("0");
|
||
m_Item2->setBackground(QBrush(QColor(32, 36, 40)));
|
||
ui.tableWidget_defectList->setItem(rowNumn, 2, m_Item2);
|
||
rowNumn++;
|
||
cName_surface_defectNums.enqueue(0);
|
||
}
|
||
|
||
DefectDataQQueue.clear();
|
||
showDefectData();
|
||
|
||
//重新设置
|
||
ui.groupBox_3->layout()->removeWidget(QBarSeriesData_day.chartView);
|
||
restQBarSeries(QBarSeriesData_day, 0);
|
||
ui.groupBox_3->layout()->addWidget(QBarSeriesData_day.chartView);
|
||
//柱状图清空
|
||
for (int b = QBarSeriesData_day.BarNum - 1; b >= 0; b--)
|
||
QBarSeriesData_day.m_QBarSet->remove(b);
|
||
QBarSeriesData_day.axis->clear();
|
||
QBarSeriesData_day.BarNum = 0;
|
||
for (int b = 0; b < DefectDataQQueue.size(); b++)
|
||
{
|
||
ui.tableWidget_day->setItem(b, 0, new QTableWidgetItem(QString::number(DefectDataQQueue[b].Order)));//缺陷类别
|
||
ui.tableWidget_day->setItem(b, 1, new QTableWidgetItem(DefectDataQQueue[b].Name));//缺陷名称//居中
|
||
ui.tableWidget_day->setItem(b, 2, new QTableWidgetItem(QString::number(DefectDataQQueue[b].Num_day)));//缺陷数
|
||
ui.tableWidget_day->item(b, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_day->item(b, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_day->item(b, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
|
||
//更新柱状图
|
||
QBarSeriesData_day.m_QBarSet->append(DefectDataQQueue[b].Num_day); //值
|
||
QBarSeriesData_day.axis->append(DefectDataQQueue[b].Name);//缺陷名称
|
||
QBarSeriesData_day.BarNum++;
|
||
}
|
||
|
||
//重新设置
|
||
ui.groupBox_4->layout()->removeWidget(QBarSeriesData_night.chartView);
|
||
restQBarSeries(QBarSeriesData_night, 0);
|
||
ui.groupBox_4->layout()->addWidget(QBarSeriesData_night.chartView);
|
||
//柱状图清空
|
||
for (int b = QBarSeriesData_night.BarNum - 1; b >= 0; b--)
|
||
QBarSeriesData_night.m_QBarSet->remove(b);
|
||
QBarSeriesData_night.axis->clear();
|
||
QBarSeriesData_night.BarNum = 0;
|
||
for (int b = 0; b < DefectDataQQueue.size(); b++)
|
||
{
|
||
ui.tableWidget_night->setItem(b, 0, new QTableWidgetItem(QString::number(DefectDataQQueue[b].Order)));//缺陷类别
|
||
ui.tableWidget_night->setItem(b, 1, new QTableWidgetItem(DefectDataQQueue[b].Name));//缺陷名称//居中
|
||
ui.tableWidget_night->setItem(b, 2, new QTableWidgetItem(QString::number(DefectDataQQueue[b].Num_night)));//缺陷数
|
||
ui.tableWidget_night->item(b, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_night->item(b, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_night->item(b, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
|
||
//更新柱状图
|
||
QBarSeriesData_night.m_QBarSet->append(DefectDataQQueue[b].Num_night); //值
|
||
QBarSeriesData_night.axis->append(DefectDataQQueue[b].Name);//缺陷名称
|
||
QBarSeriesData_night.BarNum++;
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
//设置tabwidget对应的按钮
|
||
//num对应tabWidget的第几页
|
||
void Qt_epWindow::set_tabQPushButton(int num)
|
||
{
|
||
ui.tabWidget->setCurrentIndex(num);
|
||
//ui.pushButton_tab_history_2->setStyleSheet("QPushButton{background-color: rgb(101, 103, 100);border-radius:5px;;}"
|
||
// "QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
ui.pushButton_tab_history->setStyleSheet("QPushButton{background-color: rgb(101, 103, 100);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
ui.pushButton_tab_defectList->setStyleSheet("QPushButton{background-color: rgb(101, 103, 100);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
ui.pushButton_tab_24H->setStyleSheet("QPushButton{background-color: rgb(101, 103, 100);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
ui.pushButton_tab_run->setStyleSheet("QPushButton{background-color: rgb(101, 103, 100);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
ui.pushButton_tab_operat->setStyleSheet("QPushButton{background-color: rgb(101, 103, 100);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
||
/*if (num == 0)
|
||
ui.pushButton_tab_history_2->setStyleSheet("QPushButton{background-color: rgb(0, 100, 255);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 100, 255); border:none; color:rgb(255, 255, 255); }");
|
||
else */
|
||
if(num==0)
|
||
ui.pushButton_tab_history->setStyleSheet("QPushButton{background-color: rgb(0, 100, 255);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 100, 255); border:none; color:rgb(255, 255, 255); }");
|
||
else if (num == 1)
|
||
ui.pushButton_tab_defectList->setStyleSheet("QPushButton{background-color: rgb(0, 100, 255);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 100, 255); border:none; color:rgb(255, 255, 255); }");
|
||
else if (num == 2)
|
||
ui.pushButton_tab_24H->setStyleSheet("QPushButton{background-color: rgb(0, 100, 255);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 100, 255); border:none; color:rgb(255, 255, 255); }");
|
||
else if (num == 3)
|
||
ui.pushButton_tab_run->setStyleSheet("QPushButton{background-color: rgb(0, 100, 255);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 100, 255); border:none; color:rgb(255, 255, 255); }");
|
||
else if (num == 4)
|
||
ui.pushButton_tab_operat->setStyleSheet("QPushButton{background-color: rgb(0, 100, 255);border-radius:5px;;}"
|
||
"QPushButton:hover{ background-color: rgb(0, 100, 255); border:none; color:rgb(255, 255, 255); }");
|
||
}
|
||
|
||
|
||
void Qt_epWindow::appendLog(QString data)
|
||
{
|
||
ui.plainTextEdit_history->appendPlainText(data);
|
||
}
|
||
|
||
|
||
void Qt_epWindow::showTransferImage(QString cameraKey_index, QImage* image)
|
||
{
|
||
//加锁卡死;不加锁,if (image)访问冲突
|
||
//QMutexLocker locker(showMutex);
|
||
|
||
//匹配
|
||
int index = -1;
|
||
for (int i = 0; i < cameraKeyList.size(); i++)
|
||
//if (cameraKey_index.contains(cameraKeyList[i]))
|
||
if (cameraKey_index.split("_").size() > 1)
|
||
if (cameraKey_index.split("_")[0] == cameraKeyList[i])
|
||
{
|
||
index = i;
|
||
break;
|
||
}
|
||
if (index == -1)
|
||
{
|
||
if (image)
|
||
{
|
||
delete image;
|
||
image = nullptr;
|
||
}
|
||
return;
|
||
}
|
||
qgraphicsSceneList[index]->clear();
|
||
//ui.graphicsView->scene()->clear();
|
||
QPixmap ConvertPixmap;// = QPixmap::fromImage(image);//The QPixmap class is an off-screen image representation that can be used as a paint device
|
||
//ConvertPixmap.load(imgPath);
|
||
ConvertPixmap.convertFromImage(*image);
|
||
|
||
if (m_pImageList[index])
|
||
m_pImageList[index] = nullptr;
|
||
|
||
//= new QGraphicsScene;//要用QGraphicsView就必须要有QGraphicsScene搭配着用
|
||
m_pImageList[index] = new QImageWidget(&ConvertPixmap);//实例化类ImageWidget的对象m_Image,该类继承自QGraphicsItem,是自己写的类
|
||
//int nwith = ui.graphicsView->width();//获取界面控件Graphics View的宽度
|
||
//int nheight = ui.graphicsView->height();//获取界面控件Graphics View的高度
|
||
m_pImageList[index]->setQGraphicsViewWH(nwith, nheight);//将界面控件Graphics View的width和height传进类m_Image中
|
||
qgraphicsSceneList[index]->addItem(m_pImageList[index]);//将QGraphicsItem类对象放进QGraphicsScene中
|
||
m_Viewlist[index]->setSceneRect(QRectF(-(nwith / 2), -(nheight / 2), nwith, nheight));//使视窗的大小固定在原始大小,不会随图片的放大而放大(默认状态下图片放大的时候视窗两边会自动出现滚动条,并且视窗内的视野会变大),防止图片放大后重新缩小的时候视窗太大而不方便观察图片
|
||
m_Viewlist[index]->setScene(qgraphicsSceneList[index]);//Sets the current scene to scene. If scene is already being viewed, this function does nothing.
|
||
m_Viewlist[index]->setFocus();//将界面的焦点设置到当前Graphics View控件
|
||
|
||
|
||
if (image)
|
||
{
|
||
delete image;
|
||
image = nullptr;
|
||
}
|
||
}
|
||
|
||
//刷新显示缺陷统计
|
||
void Qt_epWindow::showDefectData()
|
||
{
|
||
QMutexLocker locker(logLock); //要修改数据,加锁
|
||
QJsonArray DefectNamesArray = programObj.value("缺陷类别名称设置").toArray();
|
||
QQueue< DefectData> myDefectData;
|
||
for (int a = 0; a < DefectNamesArray.size(); a++)
|
||
{
|
||
QJsonObject DefectNameObj = DefectNamesArray[a].toObject();
|
||
int DefectOrder = DefectNameObj.value("缺陷类别").toString().toInt();
|
||
QString DefectName = DefectNameObj.value("缺陷名称").toString();
|
||
bool ifHas = false;
|
||
for (int j = 0; j < DefectDataQQueue.size(); j++)
|
||
{
|
||
if (DefectDataQQueue[j].Name == DefectName)
|
||
{
|
||
DefectDataQQueue[j].Order = DefectOrder;
|
||
myDefectData.enqueue(DefectDataQQueue[j]);
|
||
ifHas = true;
|
||
break;
|
||
}
|
||
}
|
||
if (ifHas == false)
|
||
{
|
||
DefectData newDefectData;
|
||
newDefectData.Name = DefectName;
|
||
newDefectData.Order = DefectOrder;
|
||
myDefectData.enqueue(newDefectData);
|
||
}
|
||
}
|
||
DefectDataQQueue.clear();
|
||
DefectDataQQueue.append(myDefectData);
|
||
|
||
ui.tableWidget_day->setColumnCount(3);
|
||
setBase_tableWidget(ui.tableWidget_day);
|
||
ui.tableWidget_day->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||
ui.tableWidget_day->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
|
||
QStringList list2;
|
||
list2 << "缺陷类别" << "缺陷名称" << "缺陷数";
|
||
ui.tableWidget_day->setHorizontalHeaderLabels(list2);
|
||
ui.tableWidget_day->setRowCount(0);
|
||
//柱状图清空
|
||
for (int i = QBarSeriesData_day.BarNum - 1; i >= 0; i--)
|
||
QBarSeriesData_day.m_QBarSet->remove(i);
|
||
QBarSeriesData_day.axis->clear();
|
||
QBarSeriesData_day.BarNum = 0;
|
||
for (int i = 0; i < DefectDataQQueue.size(); i++)
|
||
{
|
||
ui.tableWidget_day->setRowCount(ui.tableWidget_day->rowCount() + 1);
|
||
ui.tableWidget_day->setItem(ui.tableWidget_day->rowCount() - 1, 0, new QTableWidgetItem(QString::number(DefectDataQQueue[i].Order)));//缺陷类别
|
||
ui.tableWidget_day->setItem(ui.tableWidget_day->rowCount() - 1, 1, new QTableWidgetItem(DefectDataQQueue[i].Name));//缺陷名称//居中
|
||
ui.tableWidget_day->setItem(ui.tableWidget_day->rowCount() - 1, 2, new QTableWidgetItem(QString::number(DefectDataQQueue[i].Num_day)));//缺陷数
|
||
ui.tableWidget_day->item(ui.tableWidget_day->rowCount() - 1, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_day->item(ui.tableWidget_day->rowCount() - 1, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_day->item(ui.tableWidget_day->rowCount() - 1, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
|
||
//更新柱状图
|
||
QBarSeriesData_day.m_QBarSet->append(DefectDataQQueue[i].Num_day); //值
|
||
QBarSeriesData_day.axis->append(DefectDataQQueue[i].Name);//缺陷名称
|
||
QBarSeriesData_day.BarNum++;
|
||
}
|
||
|
||
ui.tableWidget_night->setColumnCount(3);
|
||
setBase_tableWidget(ui.tableWidget_night);
|
||
ui.tableWidget_night->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||
ui.tableWidget_night->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
|
||
ui.tableWidget_night->setHorizontalHeaderLabels(list2);
|
||
ui.tableWidget_night->setRowCount(0);
|
||
//柱状图清空
|
||
for (int i = QBarSeriesData_night.BarNum - 1; i >= 0; i--)
|
||
QBarSeriesData_night.m_QBarSet->remove(i);
|
||
QBarSeriesData_night.axis->clear();
|
||
QBarSeriesData_night.BarNum = 0;
|
||
for (int i = 0; i < DefectDataQQueue.size(); i++)
|
||
{
|
||
ui.tableWidget_night->setRowCount(ui.tableWidget_night->rowCount() + 1);
|
||
ui.tableWidget_night->setItem(ui.tableWidget_night->rowCount() - 1, 0, new QTableWidgetItem(QString::number(DefectDataQQueue[i].Order)));//缺陷类别
|
||
ui.tableWidget_night->setItem(ui.tableWidget_night->rowCount() - 1, 1, new QTableWidgetItem(DefectDataQQueue[i].Name));//缺陷名称//居中
|
||
ui.tableWidget_night->setItem(ui.tableWidget_night->rowCount() - 1, 2, new QTableWidgetItem(QString::number(DefectDataQQueue[i].Num_night)));//缺陷数
|
||
ui.tableWidget_night->item(ui.tableWidget_night->rowCount() - 1, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_night->item(ui.tableWidget_night->rowCount() - 1, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_night->item(ui.tableWidget_night->rowCount() - 1, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
|
||
//更新柱状图
|
||
QBarSeriesData_night.m_QBarSet->append(DefectDataQQueue[i].Num_night); //值
|
||
QBarSeriesData_night.axis->append(DefectDataQQueue[i].Name);//缺陷名称
|
||
QBarSeriesData_night.BarNum++;
|
||
}
|
||
}
|
||
|
||
|
||
QStringList offLineCameraKeyS;
|
||
|
||
void Qt_epWindow::getTransferData(QString key, QString cameraName, QString snInfo, QByteArray byteArray)
|
||
{
|
||
QString myByte = byteArray;
|
||
//ui.plainTextEdit->appendPlainText("key: " + key + " cameraName:" + cameraName + " snInfo:" + snInfo + " myByte:" + myByte + " sendNgInfo:" + sendNgInfo);
|
||
//qApp->processEvents();
|
||
|
||
QMutexLocker locker(logLock);
|
||
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
//PLC状态
|
||
{
|
||
if (key.contains("sendTcpStatus"))
|
||
{
|
||
bool status = true;
|
||
if (key.contains("true"))
|
||
status = true;
|
||
else if (key.contains("false"))
|
||
status = false;
|
||
QString mString;
|
||
if (status == true)
|
||
{
|
||
mString = "重连成功";
|
||
setInsertTextColor(ui.plainTextEdit_operat, QColor("green"));
|
||
ui.pushButton_PLCstatus->setStyleSheet("QPushButton{ background-color: rgb(0, 255, 0); }");
|
||
}
|
||
else
|
||
{
|
||
mString = "掉线";
|
||
setInsertTextColor(ui.plainTextEdit_operat, QColor("red"));
|
||
ui.pushButton_PLCstatus->setStyleSheet("QPushButton{ background-color: rgb(255, 0, 0); }");
|
||
}
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " PLC通信," + mString);
|
||
//ui.tabWidget->setCurrentIndex(5);
|
||
//set_tabQPushButton(5);
|
||
return;
|
||
}
|
||
}
|
||
//相机状态
|
||
{
|
||
if (key.contains("cameraDisconnect"))
|
||
{
|
||
bool status = true;
|
||
if (key.contains("true"))
|
||
status = true;
|
||
else if (key.contains("false"))
|
||
status = false;
|
||
QString mString;
|
||
if (status == true)
|
||
{
|
||
mString = "重连成功";
|
||
setInsertTextColor(ui.plainTextEdit_operat, QColor("green"));
|
||
if (offLineCameraKeyS.contains(cameraName))
|
||
offLineCameraKeyS.removeOne(cameraName);
|
||
if (offLineCameraKeyS.isEmpty())
|
||
ui.pushButton_CameraStatus->setStyleSheet("QPushButton{ background-color: rgb(0, 255, 0); }");
|
||
}
|
||
else
|
||
{
|
||
mString = "掉线";
|
||
setInsertTextColor(ui.plainTextEdit_operat, QColor("red"));
|
||
if (!offLineCameraKeyS.contains(cameraName))
|
||
offLineCameraKeyS.append(cameraName);
|
||
ui.pushButton_CameraStatus->setStyleSheet("QPushButton{ background-color: rgb(255, 0, 0); }");
|
||
}
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " "+cameraName + "," + mString);
|
||
//ui.tabWidget->setCurrentIndex(5);
|
||
//set_tabQPushButton(5);
|
||
return;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
runLogList.enqueue(QString::number(runLogListNum++) + " " + tmpDate + " " + "算法名: " + key + " 相机key_index:" + cameraName + " SN时间戳:" + snInfo + " 结果数据:" + myByte);
|
||
//不需要查看历史统计时;
|
||
if (runLogList.size() > 100000)
|
||
runLogList.dequeue();
|
||
|
||
//判断白夜班
|
||
bool ifNight = true;
|
||
//nowTime "yyyy-MM-dd hh:mm:ss:zzz"
|
||
QString nowTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
|
||
int hh = nowTime.split(" ")[1].split(":")[0].toInt();
|
||
int mm = nowTime.split(" ")[1].split(":")[1].toInt();
|
||
if ((hh > 8 && hh < 20) || (hh == 8 && mm >= 30) || (hh == 20 && mm < 30))
|
||
ifNight = false;
|
||
if (key.contains("程序号"))
|
||
{
|
||
cName_surface_defectNums.clear();
|
||
ui.label_15->setText("切换程序号\r\n"+ myByte+"");
|
||
ui.label_15->setStyleSheet("color: red;");
|
||
ui.tabWidget->setCurrentIndex(4);
|
||
set_tabQPushButton(4);
|
||
setInsertTextColor(ui.plainTextEdit_operat, QColor("red"));
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "切换程序号"+ myByte+",请稍等...");
|
||
qApp->processEvents();
|
||
Sleep(100);
|
||
//QFuture<void>qf1 = QtConcurrent::run(this, &Qt_epWindow::showWaite);
|
||
//showWaite();
|
||
//切换程序
|
||
if (programNum == myByte.toInt())
|
||
return;
|
||
programNum = myByte.toInt();
|
||
|
||
ui.label_programNum->setText(myByte);
|
||
|
||
exitLogic();
|
||
Sleep(100);
|
||
ifFisrtRun = true;
|
||
//设置Widget背景;textEdit最大行数
|
||
initWidget();
|
||
//设置工具
|
||
setTools();
|
||
ifStopLogic_transfer = false;
|
||
//通用逻辑
|
||
setLogic_transfer();
|
||
|
||
setInsertTextColor(ui.plainTextEdit_operat, QColor("green"));
|
||
ui.plainTextEdit_operat->appendPlainText(tmpDate + " " + "切换程序号完成,程序运行...");
|
||
setInsertTextColor(ui.plainTextEdit_operat, QColor("white"));
|
||
ui.label_15->setText("程序运行");
|
||
ui.label_15->setStyleSheet("color: green;");
|
||
ui.tabWidget->setCurrentIndex(0);
|
||
set_tabQPushButton(0);
|
||
//waiteBox-> close();
|
||
}
|
||
else if (myByte.contains("#") )//|| CommunicationProcessLevel==1) //简单流程每张图就是结果
|
||
{
|
||
QPieSeriesData_ALL.allNum++;
|
||
if (myByte.contains("9#") || (CommunicationProcessLevel==1 && myByte=='1'))
|
||
{
|
||
myByte = "OK";
|
||
setInsertTextColor(ui.plainTextEdit_history, QColor("green"));
|
||
setInsertTextColor(ui.plainTextEdit_run, QColor("green"));
|
||
ui.label_result->setStyleSheet("background-color: green;");
|
||
QPieSeriesData_ALL.okNum++;
|
||
}
|
||
else
|
||
{
|
||
myByte= "NG";
|
||
setInsertTextColor(ui.plainTextEdit_history, QColor("red"));
|
||
setInsertTextColor(ui.plainTextEdit_run, QColor("red"));
|
||
ui.label_result->setStyleSheet("background-color: red;");
|
||
QPieSeriesData_ALL.ngNum++;
|
||
}
|
||
//list << "序号" << "日期" << "电池芯码" << "结果";
|
||
QString myS = "序号:" + QString::number(historyLogListNum++) + " 日期:" + nowTime + " SN时间戳:" + snInfo + " 结果:" + myByte;
|
||
historyLogList.append(myS);
|
||
//不需要查看历史统计时;
|
||
if (historyLogList.size() > 100000)
|
||
historyLogList.dequeue();
|
||
ui.plainTextEdit_history->appendPlainText(historyLogList.last());
|
||
|
||
//实时信息
|
||
{
|
||
ui.label_result->setText(myByte);
|
||
ui.label_SN->setText(snInfo);
|
||
ui.label_allNum->setText(QString::number(QPieSeriesData_ALL.allNum));
|
||
ui.label_OKPercent->setText(QString::number(int(QPieSeriesData_ALL.okNum*1.0000 / QPieSeriesData_ALL.allNum * 10000) / 100.00) + "%");
|
||
ui.label_OKNum->setText(QString::number(QPieSeriesData_ALL.okNum));
|
||
ui.label_NGnum->setText(QString::number(QPieSeriesData_ALL.ngNum));; //百万级变负数??
|
||
if (QPieSeriesData_ALL.allNum > 1)
|
||
{
|
||
stop = clock();
|
||
if (stop - start > 1000)
|
||
ui.label_CT->setText(QString::number(int(int(stop - start) * 100 / 1000) * 0.01) + "秒");
|
||
else
|
||
ui.label_CT->setText(QString::number(stop - start) + "毫秒");
|
||
}
|
||
start = clock();
|
||
}
|
||
|
||
//饼图更新
|
||
{
|
||
//ALL饼图;slices()[0] ok;slices()[1] ng;
|
||
QPieSeriesData_ALL.series->slices()[0]->setValue(int(QPieSeriesData_ALL.okNum * 1.0000 / QPieSeriesData_ALL.allNum * 10000) / 100.00);
|
||
QPieSeriesData_ALL.series->slices()[1]->setValue(100.00- int(QPieSeriesData_ALL.okNum * 1.0000 / QPieSeriesData_ALL.allNum * 10000) / 100.00);
|
||
|
||
//换班判断
|
||
if (ifLastNight != ifNight)
|
||
{
|
||
if (ifNight) //白班换夜班,夜班数据清0
|
||
{
|
||
QPieSeriesData_night.allNum = 0;
|
||
QPieSeriesData_night.okNum = 0;
|
||
QPieSeriesData_night.ngNum = 0;
|
||
for (int j = 0; j < DefectDataQQueue.size(); j++)
|
||
{
|
||
DefectDataQQueue[j].Num_night = 0;
|
||
ui.tableWidget_night->item(j, 2)->setText(QString::number(DefectDataQQueue[j].Num_night));
|
||
}
|
||
}
|
||
else//夜班换白班,白班数据清0
|
||
{
|
||
QPieSeriesData_day.allNum = 0;
|
||
QPieSeriesData_day.okNum = 0;
|
||
QPieSeriesData_day.ngNum = 0;
|
||
for (int j = 0; j < DefectDataQQueue.size(); j++)
|
||
{
|
||
DefectDataQQueue[j].Num_day = 0;
|
||
ui.tableWidget_day->item(j, 2)->setText(QString::number(DefectDataQQueue[j].Num_day));
|
||
}
|
||
}
|
||
ifLastNight = ifNight;
|
||
}
|
||
if (ifNight)
|
||
{
|
||
QPieSeriesData_night.allNum++;
|
||
if(myByte=="OK")
|
||
QPieSeriesData_night.okNum++;
|
||
else if (myByte == "NG")
|
||
QPieSeriesData_night.ngNum++;
|
||
ui.label_allNum_night->setText(QString::number(QPieSeriesData_night.allNum));
|
||
ui.label_OKPercent_night->setText(QString::number(int(QPieSeriesData_night.okNum * 1.0000 / QPieSeriesData_night.allNum * 10000) / 100.00) + "%");
|
||
ui.label_OKNum_night->setText(QString::number(QPieSeriesData_night.okNum));
|
||
ui.label_NGnum_night->setText(QString::number(QPieSeriesData_night.ngNum));; //百万级变负数??
|
||
QPieSeriesData_night.series->slices()[0]->setValue((QPieSeriesData_night.okNum * 1.0000 / QPieSeriesData_night.allNum * 10000) / 100.00);
|
||
QPieSeriesData_night.series->slices()[1]->setValue(100.00 - (QPieSeriesData_night.okNum * 1.0000 / QPieSeriesData_night.allNum * 10000) / 100.00);
|
||
}
|
||
else
|
||
{
|
||
QPieSeriesData_day.allNum++;
|
||
if (myByte == "OK")
|
||
QPieSeriesData_day.okNum++;
|
||
else if (myByte == "NG")
|
||
QPieSeriesData_day.ngNum++;
|
||
ui.label_allNum_day->setText(QString::number(QPieSeriesData_day.allNum));
|
||
ui.label_OKPercent_day->setText(QString::number(int(QPieSeriesData_day.okNum * 1.0000 / QPieSeriesData_day.allNum * 10000) / 100.00) + "%");
|
||
ui.label_OKNum_day->setText(QString::number(QPieSeriesData_day.okNum));
|
||
ui.label_NGnum_day->setText(QString::number(QPieSeriesData_day.ngNum));; //百万级变负数??
|
||
QPieSeriesData_day.series->slices()[0]->setValue(int(QPieSeriesData_day.okNum * 1.0000 / QPieSeriesData_day.allNum * 10000) / 100.00);
|
||
QPieSeriesData_day.series->slices()[1]->setValue(100.00 - int(QPieSeriesData_day.okNum * 1.0000 / QPieSeriesData_day.allNum * 10000) / 100.00);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
setInsertTextColor(ui.plainTextEdit_run, QColor("white"));
|
||
int rowNumn = 0;
|
||
for (int i = 0; i < cameraKey_cName_surface.size(); i++)
|
||
for (int j = 0; j < cameraKey_cName_surface[i].size(); j++)
|
||
{
|
||
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 && !myByte.contains("1"))//匹配结果,1OK,2NG
|
||
{
|
||
/*QTableWidgetItem* m_Item2 = new QTableWidgetItem;
|
||
m_Item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
m_Item2->setText(QString::number(cName_surface_defectNums[rowNumn]++));
|
||
ui.tableWidget_defectList->setItem(rowNumn, 2, m_Item2);*/
|
||
ui.tableWidget_defectList->item(rowNumn, 2)->setText(QString::number(++cName_surface_defectNums[rowNumn]));
|
||
/*if (cameraName.contains("offline-camera41"))
|
||
Sleep(1);*/
|
||
}
|
||
|
||
rowNumn++;
|
||
}
|
||
}
|
||
|
||
//更新缺陷统计表图
|
||
if (myByte.contains("*")) //格式为:忽略段*缺陷类型1的是否有缺陷标志*缺陷类型2的是否有缺陷标志...
|
||
{
|
||
QStringList myByteList = myByte.split("*");
|
||
if (myByteList.size() > 1)
|
||
for (int i = 1; i < myByteList.size(); i++)
|
||
{
|
||
if (myByteList[i] != "1")//1 ok ,其它NG;
|
||
{
|
||
for (int j = 0; j < DefectDataQQueue.size(); j++)
|
||
if (DefectDataQQueue[j].Order == i)
|
||
{
|
||
DefectDataQQueue[j].Num_all++;
|
||
if (ifNight == true)
|
||
{
|
||
DefectDataQQueue[j].Num_night++;
|
||
ui.tableWidget_night->item(j, 2)->setText(QString::number(DefectDataQQueue[j].Num_night));
|
||
|
||
if (DefectDataQQueue[j].Num_night > QBarSeriesData_night.lastMax * 0.8)
|
||
{
|
||
//重新设置
|
||
ui.groupBox_4->layout()->removeWidget(QBarSeriesData_night.chartView);
|
||
restQBarSeries(QBarSeriesData_night, DefectDataQQueue[j].Num_night * 1.25);
|
||
ui.groupBox_4->layout()->addWidget(QBarSeriesData_night.chartView);
|
||
//柱状图清空
|
||
for (int b = QBarSeriesData_night.BarNum - 1; b >= 0; b--)
|
||
QBarSeriesData_night.m_QBarSet->remove(b);
|
||
QBarSeriesData_night.axis->clear();
|
||
QBarSeriesData_night.BarNum = 0;
|
||
for (int b = 0; b < DefectDataQQueue.size(); b++)
|
||
{
|
||
ui.tableWidget_night->setItem(b, 0, new QTableWidgetItem(QString::number(DefectDataQQueue[b].Order)));//缺陷类别
|
||
ui.tableWidget_night->setItem(b, 1, new QTableWidgetItem(DefectDataQQueue[b].Name));//缺陷名称//居中
|
||
ui.tableWidget_night->setItem(b, 2, new QTableWidgetItem(QString::number(DefectDataQQueue[b].Num_night)));//缺陷数
|
||
ui.tableWidget_night->item(b, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_night->item(b, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_night->item(b, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
|
||
//更新柱状图
|
||
QBarSeriesData_night.m_QBarSet->append(DefectDataQQueue[b].Num_night); //值
|
||
QBarSeriesData_night.axis->append(DefectDataQQueue[b].Name);//缺陷名称
|
||
QBarSeriesData_night.BarNum++;
|
||
}
|
||
}
|
||
else
|
||
QBarSeriesData_night.m_QBarSet->replace(j, DefectDataQQueue[j].Num_night);
|
||
}
|
||
else
|
||
{
|
||
DefectDataQQueue[j].Num_day++;
|
||
ui.tableWidget_day->item(j, 2)->setText(QString::number(DefectDataQQueue[j].Num_day));
|
||
|
||
if (DefectDataQQueue[j].Num_day > QBarSeriesData_day.lastMax * 0.8)
|
||
{
|
||
//重新设置
|
||
ui.groupBox_3->layout()->removeWidget(QBarSeriesData_day.chartView);
|
||
restQBarSeries(QBarSeriesData_day, DefectDataQQueue[j].Num_day * 1.25);
|
||
ui.groupBox_3->layout()->addWidget(QBarSeriesData_day.chartView);
|
||
//柱状图清空
|
||
for (int b = QBarSeriesData_day.BarNum - 1; b >= 0; b--)
|
||
QBarSeriesData_day.m_QBarSet->remove(b);
|
||
QBarSeriesData_day.axis->clear();
|
||
QBarSeriesData_day.BarNum = 0;
|
||
for (int b = 0; b < DefectDataQQueue.size(); b++)
|
||
{
|
||
ui.tableWidget_day->setItem(b, 0, new QTableWidgetItem(QString::number(DefectDataQQueue[b].Order)));//缺陷类别
|
||
ui.tableWidget_day->setItem(b, 1, new QTableWidgetItem(DefectDataQQueue[b].Name));//缺陷名称//居中
|
||
ui.tableWidget_day->setItem(b, 2, new QTableWidgetItem(QString::number(DefectDataQQueue[b].Num_day)));//缺陷数
|
||
ui.tableWidget_day->item(b, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_day->item(b, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
ui.tableWidget_day->item(b, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
|
||
//更新柱状图
|
||
QBarSeriesData_day.m_QBarSet->append(DefectDataQQueue[b].Num_day); //值
|
||
QBarSeriesData_day.axis->append(DefectDataQQueue[b].Name);//缺陷名称
|
||
QBarSeriesData_day.BarNum++;
|
||
}
|
||
}
|
||
else
|
||
QBarSeriesData_day.m_QBarSet->replace(j, DefectDataQQueue[j].Num_day);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (CommunicationProcessLevel == 1) //简单流程每张图就是结果
|
||
{
|
||
setInsertTextColor(ui.plainTextEdit_run, QColor("white"));
|
||
int rowNumn = 0;
|
||
for (int i = 0; i < cameraKey_cName_surface.size(); i++)
|
||
for (int j = 0; j < cameraKey_cName_surface[i].size(); j++)
|
||
{
|
||
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 && !byteArray.contains("1"))//匹配结果,1OK,2NG
|
||
{
|
||
/*QTableWidgetItem* m_Item2 = new QTableWidgetItem;
|
||
m_Item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||
m_Item2->setText(QString::number(cName_surface_defectNums[rowNumn]++));
|
||
ui.tableWidget_defectList->setItem(rowNumn, 2, m_Item2);*/
|
||
ui.tableWidget_defectList->item(rowNumn, 2)->setText(QString::number(++cName_surface_defectNums[rowNumn]));
|
||
/*if (cameraName.contains("offline-camera41"))
|
||
Sleep(1);*/
|
||
break;//??
|
||
}
|
||
|
||
rowNumn++;
|
||
}
|
||
}
|
||
|
||
ui.plainTextEdit_run->appendPlainText(runLogList.last());
|
||
//qApp->processEvents();
|
||
}
|
||
|
||
//退出Logic,清除界面布局;
|
||
void Qt_epWindow::exitLogic()
|
||
{
|
||
QPieSeriesData_ALL.allNum = 0;
|
||
QPieSeriesData_ALL.ngNum = 0;
|
||
|
||
if (my_Logic_transfer == nullptr)
|
||
return;
|
||
if(showTimer)showTimer->stop();
|
||
if (showTimer24H)showTimer24H->stop();
|
||
WifRun = false;
|
||
Sleep(50);
|
||
my_Logic_transfer->stopTask();
|
||
Sleep(50);
|
||
|
||
//通用逻辑接口
|
||
if (my_Logic_transfer)
|
||
delete my_Logic_transfer;
|
||
Sleep(100);
|
||
//清除布局
|
||
ui.tableWidget_defectList->setRowCount(0);
|
||
ui.tableWidget_defectList->clear();
|
||
for (int i = 0; i < m_Viewlist.size(); i++)
|
||
ui.gridLayout->removeWidget(m_Viewlist[i]);
|
||
for (int i = 0; i < m_Labellist.size(); i++)
|
||
{
|
||
m_Labellist[i]->setText("");
|
||
ui.gridLayout->removeWidget(m_Labellist[i]);
|
||
}
|
||
delete ui.gridLayout;
|
||
ui.gridLayout = new QGridLayout(ui.widget_image);
|
||
ui.gridLayout->setSpacing(6);
|
||
ui.gridLayout->setContentsMargins(11, 11, 11, 11);
|
||
ui.gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
|
||
ui.widget_image->clearMask();
|
||
ui.widget_image->repaint();
|
||
|
||
//删除子窗口,并且清除列表,才能不留痕
|
||
for (int i = 0; i < m_Viewlist.size(); i++)
|
||
delete m_Viewlist[i];
|
||
for (int i = 0; i < m_Labellist.size(); i++)
|
||
delete m_Labellist[i];
|
||
m_Viewlist.clear();
|
||
m_Labellist.clear();
|
||
|
||
cameraKeyList.clear();
|
||
cNameList.clear();
|
||
m_pImageList.clear();
|
||
qgraphicsSceneList.clear();
|
||
cameraKey_cName_surface.clear();
|
||
}
|
||
//void Qt_epWindow::showWaite()
|
||
//{
|
||
// showWaiteTimer->start(100);
|
||
// qApp->processEvents();
|
||
//
|
||
//}
|
||
|
||
void Qt_epWindow::closeEvent(QCloseEvent* event)
|
||
{
|
||
{
|
||
//this->close();
|
||
if (myParameterSettings != nullptr)
|
||
{
|
||
delete myParameterSettings;
|
||
myParameterSettings = nullptr;
|
||
}
|
||
if (myQtCameraDebug != nullptr)
|
||
{
|
||
delete myQtCameraDebug;
|
||
myQtCameraDebug = nullptr;
|
||
}
|
||
if (myQtSendPLC != nullptr)
|
||
{
|
||
delete myQtSendPLC;
|
||
myQtSendPLC = nullptr;
|
||
}
|
||
if (myQtHistoryLogList != nullptr)
|
||
{
|
||
delete myQtHistoryLogList;
|
||
myQtHistoryLogList = nullptr;
|
||
}
|
||
/*if (waiteBox != nullptr)
|
||
{
|
||
delete waiteBox;
|
||
waiteBox = nullptr;
|
||
}*/
|
||
}
|
||
//else
|
||
// event->ignore();
|
||
}
|
||
|
||
|
||
Qt_epWindow::~Qt_epWindow()
|
||
{
|
||
exitLogic();
|
||
}
|
||
|
||
#define MOUSE_MARGIN 3
|
||
//计算鼠标位置
|
||
Qt_epWindow::MousePoss Qt_epWindow::calcmouseposs(QPoint p)
|
||
{
|
||
Qt_epWindow::MousePoss mp;
|
||
if (p.x() < MOUSE_MARGIN && p.y() < MOUSE_MARGIN)
|
||
mp = Qt_epWindow::MousePoss::LeftUp; //左上
|
||
else if (p.x() > MOUSE_MARGIN && p.y() < MOUSE_MARGIN && p.x() < this->width() - MOUSE_MARGIN)
|
||
mp = Qt_epWindow::MousePoss::Up; //上
|
||
else if (p.x() > this->width() - MOUSE_MARGIN && p.y() < MOUSE_MARGIN)
|
||
mp = Qt_epWindow::MousePoss::RightUp; //右上
|
||
else if (p.x() > this->width() - MOUSE_MARGIN && p.y() > MOUSE_MARGIN && p.y() < this->height() - MOUSE_MARGIN)
|
||
mp = Qt_epWindow::MousePoss::Right; //右
|
||
else if (p.x() > this->width() - MOUSE_MARGIN && p.y() > this->height() - MOUSE_MARGIN)
|
||
mp = Qt_epWindow::MousePoss::RightDown; //右下
|
||
else if (p.x() > MOUSE_MARGIN && p.x() < this->width() - MOUSE_MARGIN && p.y() > this->height() - MOUSE_MARGIN)
|
||
mp = Qt_epWindow::MousePoss::Down; //下
|
||
else if (p.x() < MOUSE_MARGIN && p.y() > this->height() - MOUSE_MARGIN)
|
||
mp = Qt_epWindow::MousePoss::LeftDown; //左下
|
||
else if (p.x() < MOUSE_MARGIN && p.y() < this->height() - MOUSE_MARGIN && p.y() > MOUSE_MARGIN)
|
||
mp = Qt_epWindow::MousePoss::Left; //左
|
||
else
|
||
mp = Qt_epWindow::MousePoss::Middle; //中间
|
||
return mp;
|
||
}
|
||
//修改鼠标样式
|
||
void Qt_epWindow::setCursorType(Qt_epWindow::MousePoss type)
|
||
{
|
||
Qt::CursorShape cursor;
|
||
switch (type)
|
||
{
|
||
case Qt_epWindow::MousePoss::LeftUp:
|
||
case Qt_epWindow::MousePoss::RightDown:
|
||
cursor = Qt::SizeFDiagCursor;
|
||
break;
|
||
case Qt_epWindow::MousePoss::Up:
|
||
case Qt_epWindow::MousePoss::Down:
|
||
cursor = Qt::SizeVerCursor;
|
||
break;
|
||
case Qt_epWindow::MousePoss::RightUp:
|
||
case Qt_epWindow::MousePoss::LeftDown:
|
||
cursor = Qt::SizeBDiagCursor;
|
||
break;
|
||
case Qt_epWindow::MousePoss::Right:
|
||
case Qt_epWindow::MousePoss::Left:
|
||
cursor = Qt::SizeHorCursor;
|
||
break;
|
||
default:
|
||
cursor = Qt::ArrowCursor;
|
||
break;
|
||
}
|
||
setCursor(cursor);
|
||
}
|
||
//改变窗口的大小
|
||
void Qt_epWindow::changeWindowSize(Qt_epWindow::MousePoss type, QRect& wid, QPoint ptemp, int minWidth, int minHeight)
|
||
{
|
||
switch (type)//改变窗口的大小
|
||
{
|
||
case Qt_epWindow::MousePoss::LeftUp:
|
||
{
|
||
QPoint pos = wid.topLeft();
|
||
|
||
if (wid.width() > minWidth || ptemp.x() < 0)
|
||
pos.rx() = pos.rx() + ptemp.x();
|
||
if (wid.height() > minHeight || ptemp.y() < 0)
|
||
pos.ry() = pos.ry() + ptemp.y();
|
||
|
||
wid.setTopLeft(pos);
|
||
break;//左上角
|
||
}
|
||
case Qt_epWindow::MousePoss::RightUp:
|
||
{
|
||
QPoint pos = wid.topRight();
|
||
|
||
if (wid.width() > minWidth || ptemp.x() > 0)
|
||
pos.rx() = pos.rx() + ptemp.x();
|
||
if (wid.height() > minHeight || ptemp.y() < 0)
|
||
pos.ry() = pos.ry() + ptemp.y();
|
||
|
||
wid.setTopRight(pos);
|
||
break;//右上角
|
||
}
|
||
case Qt_epWindow::MousePoss::LeftDown:
|
||
{
|
||
QPoint pos = wid.bottomLeft();
|
||
|
||
if (wid.width() > minWidth || ptemp.x() < 0)
|
||
pos.rx() = pos.rx() + ptemp.x();
|
||
if (wid.height() > minHeight || ptemp.y() > 0)
|
||
pos.ry() = pos.ry() + ptemp.y();
|
||
|
||
wid.setBottomLeft(pos);
|
||
break;//左下角
|
||
}
|
||
case Qt_epWindow::MousePoss::RightDown:
|
||
{
|
||
QPoint pos = wid.bottomRight();
|
||
|
||
if (wid.width() > minWidth || ptemp.x() > 0)
|
||
pos.rx() = pos.rx() + ptemp.x();
|
||
if (wid.height() > minHeight || ptemp.y() > 0)
|
||
pos.ry() = pos.ry() + ptemp.y();
|
||
|
||
wid.setBottomRight(pos);
|
||
break;//右下角
|
||
}
|
||
case Qt_epWindow::MousePoss::Up:
|
||
{
|
||
int topY = wid.top();
|
||
if (wid.height() > minHeight || ptemp.y() < 0)
|
||
topY = topY + ptemp.y();
|
||
|
||
wid.setTop(topY);
|
||
break;//上
|
||
}
|
||
case Qt_epWindow::MousePoss::Left:
|
||
{
|
||
int leftX = wid.left();
|
||
|
||
if (wid.width() > minWidth || ptemp.x() < 0)
|
||
leftX = leftX + ptemp.x();
|
||
|
||
wid.setLeft(leftX);
|
||
break;//左
|
||
}
|
||
case Qt_epWindow::MousePoss::Right:
|
||
{
|
||
int rightX = wid.right();
|
||
|
||
if (wid.width() > minWidth || ptemp.x() > 0)
|
||
rightX = rightX + ptemp.x();
|
||
|
||
wid.setRight(rightX);
|
||
break;//右
|
||
}
|
||
case Qt_epWindow::MousePoss::Down:
|
||
{
|
||
int botY = wid.bottom();
|
||
if (wid.height() > minHeight || ptemp.y() > 0)
|
||
botY = botY + ptemp.y();
|
||
|
||
wid.setBottom(botY);
|
||
break;//下
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//三个鼠标事件的重写
|
||
void Qt_epWindow::mousePressEvent(QMouseEvent* e)
|
||
{
|
||
|
||
if (e->button() == Qt::LeftButton) //鼠标左键按下
|
||
{
|
||
m_lastPos = e->globalPos();
|
||
e->ignore();
|
||
}
|
||
|
||
|
||
}
|
||
//鼠标移动
|
||
void Qt_epWindow::mouseMoveEvent(QMouseEvent* e)
|
||
{
|
||
QWidget * activeWindow= QApplication::activeWindow();
|
||
if (activeWindow != this || !this->isTopLevel())
|
||
{
|
||
if (mp_curPos != Qt_epWindow::MousePoss::Middle)
|
||
{
|
||
mp_curPos=Qt_epWindow::MousePoss::Middle;
|
||
setCursorType(mp_curPos);
|
||
std::cout << "setCursorType Middle" << std::endl;
|
||
}
|
||
return;
|
||
}
|
||
//最大化状态,鼠标是否在标题栏,拖拽还原
|
||
if (this->isMaximized())
|
||
{
|
||
if (ui.title->geometry().contains(this->mapFromGlobal(QCursor::pos())) && e->buttons() == Qt::LeftButton)
|
||
{
|
||
QPoint ptemp = e->globalPos();
|
||
if (ptemp != m_lastPos)
|
||
{
|
||
this->showNormal();
|
||
}
|
||
}
|
||
}
|
||
Qt_epWindow::MousePoss curPos = calcmouseposs(e->pos());
|
||
if (!e->buttons())
|
||
{
|
||
setCursorType(curPos);
|
||
mp_curPos = curPos;
|
||
}
|
||
////拖动线条,调整右侧控件尺寸
|
||
//QRect lineRect = ui.line_left->geometry();
|
||
////判断鼠标位置
|
||
//if (e->pos().x() > lineRect.x() - 2 && e->pos().x() < lineRect.x() + 2 && mp_curPos == Qt_epWindow::MousePoss::Middle)
|
||
//{
|
||
// setCursorType(Qt_epWindow::MousePoss::Left);
|
||
// if (e->buttons() == Qt::LeftButton) //坐标左键按下并移动
|
||
// {
|
||
// QPoint ptemp = e->globalPos();
|
||
// ptemp = ptemp - m_lastPos; //鼠标移动的偏移量
|
||
// //调整右侧
|
||
// QRect frameRightRect = ui.frame_right->geometry();
|
||
// int newWidth = frameRightRect.width() - ptemp.x();
|
||
// if (newWidth > 100 && newWidth < 1500)
|
||
// {
|
||
// ui.frame_right->setMinimumWidth(newWidth);
|
||
// }
|
||
// m_lastPos = e->globalPos();
|
||
// }
|
||
//}
|
||
//else
|
||
if (e->buttons() == Qt::LeftButton) //坐标左键按下并移动
|
||
{
|
||
QPoint ptemp = e->globalPos();
|
||
ptemp = ptemp - m_lastPos; //鼠标移动的偏移量
|
||
if (mp_curPos == Qt_epWindow::MousePoss::Middle && ui.title->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
||
&& !ui.pushButton_max->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
||
&& !ui.pushButton_min->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
||
&& !ui.pushButton_close->geometry().contains(this->mapFromGlobal(QCursor::pos())))
|
||
{
|
||
move(ptemp + pos());
|
||
}
|
||
else
|
||
{
|
||
QRect wid = geometry();
|
||
//if (wid != m_lastWindowRect)
|
||
{
|
||
int minWidth = this->minimumWidth();
|
||
int minHeight = this->minimumHeight();
|
||
if (ptemp.x() < 50 && ptemp.x() > -50)
|
||
{
|
||
changeWindowSize(mp_curPos, wid, ptemp, minWidth, minHeight);
|
||
//更新大小
|
||
setGeometry(wid);
|
||
}
|
||
ui.frame_right->setMinimumSize(wid.width() / 5, 300); //调整右侧尺寸
|
||
}
|
||
}
|
||
m_lastPos = e->globalPos();
|
||
}
|
||
e->ignore();
|
||
}
|
||
//鼠标释放
|
||
void Qt_epWindow::mouseReleaseEvent(QMouseEvent* e)
|
||
{
|
||
if (e->button() == Qt::LeftButton && ui.title->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
||
&& !ui.pushButton_max->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
||
&& !ui.pushButton_min->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
||
&& !ui.pushButton_close->geometry().contains(this->mapFromGlobal(QCursor::pos()))) //鼠标左键释放
|
||
{
|
||
int dx = e->globalX() - m_lastPos.x();
|
||
int dy = e->globalY() - m_lastPos.y();
|
||
//if (dx < 50 && dx > -50 && dy < 50 && dy > -50)
|
||
move(x() + dx, y() + dy);
|
||
}
|
||
QApplication::restoreOverrideCursor();//恢复鼠标指针性状
|
||
e->ignore();
|
||
} |