287 lines
7.9 KiB
C++
287 lines
7.9 KiB
C++
#pragma once
|
||
|
||
#include <QtWidgets/QMainWindow>
|
||
#include "ui_Qt_epWindow.h"
|
||
#include "QImageWidget.h"
|
||
#include <qmenu.h>
|
||
#include <qdebug.h>
|
||
#include <qprocess.h>
|
||
#include "qmutex.h"
|
||
#include "qfuture.h"
|
||
#include "QtConcurrent/qtconcurrent"
|
||
#include "qmessagebox.h"
|
||
#include "QGraphicsScene.h"
|
||
#include "QGraphicsView.h"
|
||
#include <QCloseEvent>
|
||
#include "QMouseEvent"
|
||
#include <QtCharts>
|
||
#include "QtCharts/qpieseries.h"
|
||
#include "QtCharts/qbarseries.h"
|
||
|
||
//通用逻辑接口
|
||
#include "Logic_transfer.h"
|
||
#include "QtParameterSettings.h"
|
||
#include "QtHistoryLogList.h"
|
||
|
||
|
||
//密码登录接口
|
||
#include "QtPassword.h"
|
||
//相机调试
|
||
#include "QtCameraDebug.h"
|
||
//手动补信号
|
||
#include "QtSendPLC.h"
|
||
//存图设置
|
||
#include "QtSaveImgSet.h"
|
||
//缺陷名称设置
|
||
#include "QtDefectSet.h"
|
||
|
||
#pragma execution_character_set("utf-8")
|
||
|
||
//struct LogListStruct
|
||
//{
|
||
// QString key, QString cameraName, QString snInfo, QByteArray byte
|
||
//};
|
||
|
||
struct QPieSeriesData
|
||
{
|
||
QChart* m_chart = nullptr;
|
||
QPieSeries* series = nullptr;
|
||
QChartView* chartView = nullptr;
|
||
int allNum = 0; //总数
|
||
int okNum = 0; //OK数
|
||
int ngNum = 0; //NG数
|
||
float okPercent = 100.00; //OK率
|
||
};
|
||
|
||
struct QBarSeriesData
|
||
{
|
||
QChart* m_chart = nullptr;
|
||
QBarSeries* m_QBarSeries = nullptr; //类型数据的集合
|
||
QChartView* chartView = nullptr;
|
||
QBarSet* m_QBarSet = nullptr; //单个类型数据 数组
|
||
QBarCategoryAxis* axis = nullptr; //显示名称
|
||
int BarNum = 0; //柱的个数
|
||
int reFreshValue = 50;
|
||
int lastMax = 0;
|
||
};
|
||
|
||
struct DefectData
|
||
{
|
||
QString Name; //缺陷名称
|
||
int Order = 0; //缺陷类型
|
||
int Num_all = 0; //
|
||
int Num_day = 0;
|
||
int Num_night = 0;
|
||
};
|
||
|
||
class Qt_epWindow : public QMainWindow
|
||
{
|
||
Q_OBJECT
|
||
|
||
public:
|
||
Qt_epWindow(QWidget *parent = nullptr);
|
||
~Qt_epWindow();
|
||
|
||
void initWidget();
|
||
void setTools();
|
||
void pushButtonS();
|
||
|
||
bool initLogic_transfer();
|
||
bool startLogic_transfer();
|
||
bool stopLogic_transfer();
|
||
|
||
bool setLogic_transfer();
|
||
|
||
void appendLog(QString data);
|
||
|
||
void setInsertTextColor(QPlainTextEdit* plainTextEdit, QColor& color);
|
||
|
||
//显示Logic_transfer返回的图像;key为相机key_图像序号
|
||
void showTransferImage(QString key, QImage* qimage);
|
||
|
||
|
||
//自动布局图像显示窗口
|
||
void adjustLayout(QJsonObject obj);
|
||
//自动布局缺陷统计tabwidget
|
||
void adjustDefectWidegt(QJsonObject obj);
|
||
//初始化24小时统计
|
||
void initWidegt24H();
|
||
//退出Logic,清除界面布局;
|
||
void exitLogic();
|
||
//切换程序号,等待
|
||
//void showWaite();
|
||
public slots:
|
||
//
|
||
|
||
//检测、汇总算法返回的数据;key,算法名称;cameraName,相机key_图像序号;snInfo,SN_时间戳;byte,结果数据;
|
||
void getTransferData(QString, QString, QString, QByteArray);
|
||
|
||
//连接登录界面,QtPassword的登录成功
|
||
void getLoginSuccess(QString authority_user);
|
||
//void pushButton_set_clicked(bool checked = false);
|
||
|
||
//手动补信号
|
||
void sendPLCData(QString cmd);
|
||
|
||
/*void getTransfer_sendTcpStatus(bool);
|
||
void getTransfer_cameraDisconnect(QString msg, bool status);*/
|
||
|
||
private:
|
||
bool ifFisrtRun = true;
|
||
bool initLogic_transfer_OK = false;
|
||
bool ifStopLogic_transfer = false;
|
||
QtPassword* myQtPassword;
|
||
//手动补信号
|
||
QWidget* sendPLCwidget;
|
||
QQueue<QPushButton*> sendPLCbuttonS;
|
||
QStringList sendPLCcmd;
|
||
QMap< QPushButton*, int> sendPLCbuttonS_index;
|
||
//int buttonNum = 0;
|
||
|
||
Logic_transfer* my_Logic_transfer = nullptr;
|
||
bool ifFirstLogin = true;
|
||
QMutex* logLock;
|
||
bool WifRun = true;
|
||
QQueue<QString> runLogList;
|
||
QQueue<QString> historyLogList;
|
||
clock_t start, stop;
|
||
|
||
//显示图片
|
||
QList < QImageWidget* > m_pImageList;
|
||
QList < QGraphicsScene*> qgraphicsSceneList;
|
||
//图像显示窗口
|
||
QList<QGraphicsView*> m_Viewlist;
|
||
QList<QLabel*> m_Labellist;
|
||
QStringList cameraKeyList;
|
||
QStringList cNameList;
|
||
QMutex* showMutex;
|
||
int nwith = 0;//获取界面控件Graphics View的宽度
|
||
int nheight = 0;//获取界面控件Graphics View的高度
|
||
|
||
QMap<QString, int> key_showNum;
|
||
int match20 = 0;
|
||
|
||
//相机key界面窗口名称拍照面描述列表
|
||
QQueue<QStringList> cameraKey_cName_surface;
|
||
//界面窗口名称拍照面,缺陷数
|
||
QQueue<int> cName_surface_defectNums;
|
||
//12H统计,总检测数
|
||
QQueue<int> hour_allNum12;
|
||
//12H统计,良品数
|
||
QQueue<int> hour_OKNum12;
|
||
QTimer* showTimer = nullptr;
|
||
QTimer* showTimer24H = nullptr;
|
||
int lastAllNum = 0;
|
||
int lasthour_allNum12 = 0;
|
||
int lasthour_OKNum12 = 0;
|
||
//程序号
|
||
int programNum = 1;
|
||
QMessageBox waiteBox;
|
||
QMessageBox::StandardButton waiteBox_result;
|
||
QString cfgName;
|
||
QJsonObject programObj;
|
||
//QTimer* showWaiteTimer = nullptr;
|
||
|
||
//参数设置界面
|
||
QtParameterSettings* myParameterSettings = nullptr;
|
||
|
||
//相机调试界面
|
||
QtCameraDebug* myQtCameraDebug = nullptr;
|
||
//手动补信号界面
|
||
QtSendPLC* myQtSendPLC = nullptr;
|
||
//存图设置界面
|
||
QtSaveImgSet* myQtSaveImgSet = nullptr;
|
||
//缺陷名称设置
|
||
QtDefectSet* myQtDefectSet = nullptr;
|
||
|
||
//历史统计分析界面
|
||
QtHistoryLogList* myQtHistoryLogList = nullptr;
|
||
QString myauthority_user;
|
||
int runLogListNum = 0;
|
||
int historyLogListNum = 0;
|
||
//项目通信流程,1简单流程,2标准流程;
|
||
int CommunicationProcessLevel = 0;
|
||
//设置tabwidget对应的按钮
|
||
void set_tabQPushButton(int num);
|
||
|
||
//饼状图
|
||
QPieSeriesData QPieSeriesData_ALL;
|
||
QPieSeriesData QPieSeriesData_day;
|
||
QPieSeriesData QPieSeriesData_night;
|
||
//重置饼状图
|
||
void restQPieSeries(QPieSeriesData& mQPieSeriesData);
|
||
//柱状图
|
||
QBarSeriesData QBarSeriesData_day;
|
||
QBarSeriesData QBarSeriesData_night;
|
||
//重置柱状图
|
||
void restQBarSeries(QBarSeriesData& mQBarSeriesData,int myValue);
|
||
|
||
//上次是夜班?
|
||
bool ifLastNight = false;
|
||
QQueue< DefectData> DefectDataQQueue; //按照缺陷类别名称统计
|
||
void showDefectData();
|
||
|
||
//重新加载json设置到Logic_transfer
|
||
bool reLoadJsonSetTask();
|
||
private:
|
||
Ui::Qt_epWindowClass ui;
|
||
protected:
|
||
void closeEvent(QCloseEvent* event);
|
||
protected:
|
||
void mouseMoveEvent(QMouseEvent* event) override;
|
||
void mousePressEvent(QMouseEvent* event) override;
|
||
void mouseReleaseEvent(QMouseEvent* event) override;
|
||
private:
|
||
QPoint m_lastPos;
|
||
QRect m_lastWindowRect;
|
||
public:
|
||
enum MousePoss { LeftUp = 0, Up, RightUp, Right, RightDown, Down, LeftDown, Left, Middle };
|
||
private:
|
||
MousePoss mp_curPos; //记录鼠标当前所在区域的变量
|
||
//改变窗口的大小
|
||
void changeWindowSize(MousePoss type, QRect& wid, QPoint ptemp, int minWidth, int minHeight);
|
||
//修改鼠标样式
|
||
void setCursorType(MousePoss type);
|
||
//计算鼠标位置
|
||
MousePoss calcmouseposs(QPoint p);
|
||
};
|
||
|
||
|
||
//class TimedMessageBox : public QMessageBox
|
||
//{
|
||
// Q_OBJECT
|
||
//
|
||
//public:
|
||
// TimedMessageBox(int timeoutSeconds, const QString& title, const QString& text, Icon icon, int button0, int button1, int button2, QWidget* parent, Qt::WindowFlags flags = (Qt::WindowFlags)Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint)
|
||
// : QMessageBox(title, text, icon, button0, button1, button2, parent, flags)
|
||
// , _timeoutSeconds(timeoutSeconds + 1)
|
||
// , _text(text)
|
||
// {
|
||
// connect(&_timer, SIGNAL(timeout()), this, SLOT(Tick()));
|
||
// _timer.setInterval(1000);
|
||
// }
|
||
//
|
||
// virtual void showEvent(QShowEvent* e)
|
||
// {
|
||
// QMessageBox::showEvent(e);
|
||
// Tick();
|
||
// _timer.start();
|
||
// }
|
||
//
|
||
//private slots:
|
||
// void Tick()
|
||
// {
|
||
// if (--_timeoutSeconds >= 0) setText(_text.arg(_timeoutSeconds));
|
||
// else
|
||
// {
|
||
// _timer.stop();
|
||
// defaultButton()->animateClick();
|
||
// }
|
||
// }
|
||
//
|
||
//private:
|
||
// QString _text;
|
||
// int _timeoutSeconds;
|
||
// QTimer _timer;
|
||
//};
|