Files
2024-10-17 16:37:42 +08:00

287 lines
7.9 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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;
//};