3500/realtimeform.cpp

1315 lines
63 KiB
C++
Raw Normal View History

2023-04-14 19:30:30 +08:00
#include "realtimeform.h"
#include "ui_realtimeform.h"
#include <QDebug>
#include <QMenu>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QFile>
#include <QMessageBox>
#include "MyCustomGraphicsItem.h"
#include "NetMgr.h"
#include <QNetworkRequest>
2023-04-27 19:48:15 +08:00
#include "QGraphicsMovieItem.h"
#include <QLabel>
#include "log.h"
2023-10-19 14:15:31 +08:00
#include <QSettings>
#include "customrectitem.h"
#include "mygraphicrectitem.h"
2023-04-14 19:30:30 +08:00
CRealTimeForm::CRealTimeForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::CRealTimeForm)
{
ui->setupUi(this);
ui->graphicsView->setContextMenuPolicy(Qt::CustomContextMenu);
QObject::connect(ui->graphicsView ,SIGNAL(customContextMenuRequested(const QPoint &)),this,SLOT(on_graphView_customContextMenuRequested(const QPoint &)));
ui->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
m_pGraphicsScene = new QGraphicsScene();
2023-10-19 14:15:31 +08:00
m_pGraphicsScene->setSceneRect(0,0,600,550);
2023-04-14 19:30:30 +08:00
ui->graphicsView->setScene(m_pGraphicsScene);
ui->graphicsView->setDragMode(QGraphicsView::RubberBandDrag);
ui->graphicsView_2->setContextMenuPolicy(Qt::CustomContextMenu);
QObject::connect(ui->graphicsView_2 ,SIGNAL(customContextMenuRequested(const QPoint &)),this,SLOT(on_graphView_customContextMenuRequested(const QPoint &)));
ui->graphicsView_2->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
m_pGraphicsScene_2 = new QGraphicsScene();
2023-10-19 14:15:31 +08:00
m_pGraphicsScene_2->setSceneRect(0,0,600,550);
2023-04-14 19:30:30 +08:00
ui->graphicsView_2->setScene(m_pGraphicsScene_2);
ui->graphicsView_2->setDragMode(QGraphicsView::RubberBandDrag);
ui->tabWidget->setTabPosition(QTabWidget::South);
ui->tabWidget->setTabShape(QTabWidget::Triangular);
//绑定HTTP消息响应
connect(g_NetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
m_pSocket = new QTcpSocket(this);
//QObject::connect(m_pSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(slotStateChanged(QAbstractSocket::SocketState)));
2023-04-27 19:48:15 +08:00
m_EditMode = 0;
2023-10-19 14:15:31 +08:00
m_MachineStatus = 1;
//读取ini
QSettings settingsread(QCoreApplication::applicationDirPath() + "\\config\\config.ini",QSettings::IniFormat);
m_RealtimeLog = settingsread.value("Log/realtime").toInt();
2023-04-27 19:48:15 +08:00
LoadGraphicsConfig(0);
2023-04-14 19:30:30 +08:00
InitChannelInfo();
2023-04-27 19:48:15 +08:00
//m_strServerIp = IP;
2023-04-14 19:30:30 +08:00
m_nServerPort = 7305;
m_pSocket = new QTcpSocket(this);
// /*下面是几种常用的信号更多的信号可以查看QAbstractSocket和QIODevice文档*/
// connect(m_pSocket, &QTcpSocket::connected, this, [] () {
// qDebug() << "socket已连接";
// });
// connect(m_pSocket, &QTcpSocket::disconnected, this, [] () {
// qDebug() << "socket已断开连接";
// });
// connect(m_pSocket, &QTcpSocket::stateChanged, this, [] (QAbstractSocket::SocketState socketState) {
// qDebug() << "socket状态改变" << socketState;
// });
// connect(m_pSocket, &QTcpSocket::readyRead, this, [] () {
// qDebug() << "有数据可读";
// });
//connect(m_pSocket, SIGNAL(readyRead()), this, SLOT(slotRecieve()));
connect(m_pSocket, &QTcpSocket::readyRead, this, &CRealTimeForm::slotRecieve);
connect(m_pSocket, &QTcpSocket::disconnected, this, &CRealTimeForm::disConnect);
#ifdef QT_NO_DEBUG
2023-10-19 14:15:31 +08:00
id1 = startTimer(2000); //参数1 间隔 单位 毫秒
2023-04-14 19:30:30 +08:00
//定时器第二种方式
QTimer * timer = new QTimer(this);
//启动定时器
timer->start(500);
#endif
2023-04-14 19:30:30 +08:00
}
CRealTimeForm::~CRealTimeForm()
{
delete ui;
}
void CRealTimeForm::timerEvent(QTimerEvent *ev)
{
if(ev->timerId() == id1)
{
QJsonObject allObj;
allObj.insert("cmd", "09");
// 设置IP和端口号连接
2023-04-27 19:48:15 +08:00
m_pSocket->connectToHost(IP, m_nServerPort);
2023-04-14 19:30:30 +08:00
// 设置超时连接时间
m_bConnected = m_pSocket->waitForConnected(1 * 1000);
// QNetworkRequest req;
// QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP);
// req.setUrl(sUrl);
// g_NetMgr->PostJson(req,allObj);
QJsonDocument doc(allObj);
QString strData = QString(doc.toJson(QJsonDocument::Indented));
int nRet = m_pSocket->write(strData.toStdString().c_str(), strlen(strData.toStdString().c_str()));
2023-04-27 19:48:15 +08:00
if(nRet !=0){
2023-10-19 14:15:31 +08:00
//qDebug() << "09 通信失败" << endl;
//customLogMessageHandler(QtWarningMsg,"09通信失败");
2023-04-27 19:48:15 +08:00
}
2023-04-14 19:30:30 +08:00
}
}
void CRealTimeForm::InitChannelInfo()
{
g_channelSetting = g_SqliteDB->GetDataMultiLine("t_ChannelSetting");
2023-10-19 14:15:31 +08:00
g_ChannelBaseInfo.clear();
QVector<channelBaseInfo>().swap(g_ChannelBaseInfo);
2023-04-14 19:30:30 +08:00
for (int i = 0; i < g_channelSetting.size(); i++)
{
QMap<QString,QString> mapChannelType;
mapChannelType.insert(g_channelSetting[i].sensorType,g_channelSetting[i].channelName);
g_MapChannel.insert(g_channelSetting[i].channelId,mapChannelType);
channelBaseInfo tempchannelbaseinfo;
tempchannelbaseinfo.bordNo = g_channelSetting[i].sensorModuleNo;
tempchannelbaseinfo.channelID = g_channelSetting[i].channelId;
tempchannelbaseinfo.channelNoInBoard = g_channelSetting[i].sensorNo;
tempchannelbaseinfo.channelName = g_channelSetting[i].channelName;
tempchannelbaseinfo.channelType = g_channelSetting[i].sensorType;
tempchannelbaseinfo.boardType = g_channelSetting[i].boardType;
tempchannelbaseinfo.sensorEngineeringUnit = g_channelSetting[i].sensorEngineeringUnit;
tempchannelbaseinfo.defaultDisplay = g_channelSetting[i].defaultDisplay;
2023-10-19 14:15:31 +08:00
tempchannelbaseinfo.pairChannelId = g_channelSetting[i].pairChannelId;
tempchannelbaseinfo.speedRefChannelId = g_channelSetting[i].speedRefChannelId;
tempchannelbaseinfo.isEnable = g_channelSetting[i].isEnable;
tempchannelbaseinfo.ChUnitDot = g_channelSetting[i].ChUnitDot;
2023-04-14 19:30:30 +08:00
g_ChannelBaseInfo.append(tempchannelbaseinfo);
}
qDebug() <<"InitChannelInfo"<< g_ChannelBaseInfo.size()<< endl;
}
void CRealTimeForm::on_graphView_customContextMenuRequested(const QPoint &pos)
{
qDebug() << " custom menu!!!!!!!!!"<< "##"<< pos.x() << " ; "<< pos.y();
// if(ui->graphicsView->itemAt(pos) || ui->graphicsView_2->itemAt(pos))
// return;
2023-04-14 19:30:30 +08:00
QMenu menu(this);
2023-04-17 17:40:26 +08:00
pActionVerticalLine = menu.addAction("添加竖线");
pActionHorizontalLine = menu.addAction("添加横线");
pActionRect = menu.addAction("添加通道");
2023-10-19 14:15:31 +08:00
pActionRect2 = menu.addAction("矩形框");
2023-04-17 17:40:26 +08:00
pActionPixmap = menu.addAction("添加图片");
pActionText = menu.addAction("添加文字");
2023-04-27 19:48:15 +08:00
pActionEdit = menu.addAction("编辑");
2023-04-17 17:40:26 +08:00
pActionSave = menu.addAction("保存");
2023-04-14 19:30:30 +08:00
pActionVerticalLine->setData(1);
pActionHorizontalLine->setData(2);
pActionRect->setData(3);
pActionPixmap->setData(4);
pActionText->setData(5);
pActionSave->setData(6);
2023-04-27 19:48:15 +08:00
pActionEdit->setData(7);
2023-10-19 14:15:31 +08:00
pActionRect2->setData(8);
2023-04-14 19:30:30 +08:00
connect(pActionVerticalLine, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
connect(pActionHorizontalLine, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
connect(pActionRect, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
connect(pActionPixmap, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
connect(pActionText, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
connect(pActionSave, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
2023-04-27 19:48:15 +08:00
connect(pActionEdit, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
2023-10-19 14:15:31 +08:00
connect(pActionRect2, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
2023-04-14 19:30:30 +08:00
menu.exec(QCursor::pos());
//menu.exec(ui->graphicsView->mapToGlobal(pos));
// if(pActionLine == menu.exec(ui->graphicsView->mapToGlobal(pos))){
// qDebug() << " Line!!!!!!!!!"<< "##"<< pos.x() << " ; "<< pos.y();
// SetCurDrawType("Line",pos);
// }else if(pActionRect == menu.exec(ui->graphicsView->mapToGlobal(pos))){
// qDebug() << " Rect!!!!!!!!!"<< "##"<< pos.x() << " ; "<< pos.y();
// SetCurDrawType("Rect",pos);
// }
}
void CRealTimeForm::onTaskBoxContextMenuEvent()
{
QAction *pEven = qobject_cast<QAction *>(this->sender());
int iType = pEven->data().toInt();
switch (iType)
{
case 1:
SetCurDrawType("vertical");
break;
case 2:
SetCurDrawType("Horizonta");
break;
case 3:
SetCurDrawType("Channel");
break;
case 4:
SetCurDrawType("Pixmap");
break;
case 5:
SetCurDrawType("Text");
break;
case 6:
SetCurDrawType("Save");
break;
2023-04-27 19:48:15 +08:00
case 7:
SetEdit();
break;
2023-10-19 14:15:31 +08:00
case 8:
SetCurDrawType("Rect");
break;
2023-04-14 19:30:30 +08:00
}
}
2023-04-27 19:48:15 +08:00
void CRealTimeForm::SetEdit()
{
m_EditMode = 1;
LoadGraphicsConfig(1);
}
2023-04-14 19:30:30 +08:00
void CRealTimeForm::on_addchannel(channelBaseInfo channelbaseInfo,QString str)
{
QPen pen; // 定义一个画笔,设置画笔颜色和宽度
pen.setColor(QColor(0, 0, 0,0));
pen.setWidth(1);
CMyCustomGraphicsItem* pItemGroup = new CMyCustomGraphicsItem();
2024-03-14 09:35:39 +08:00
QGraphicsRectItem* pRect = new QGraphicsRectItem(0, 0, 290, 30);
2023-04-14 19:30:30 +08:00
pRect->setBrush(QBrush(QColor(255, 255, 255)));
pRect->setPen(pen);
2023-10-19 14:15:31 +08:00
pRect->setPos(0, 0);
2023-04-14 19:30:30 +08:00
pRect->setData(1,"Rect");
pItemGroup->addToGroup(pRect);
pItemGroup->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
QGraphicsTextItem* pTextUnits = NULL;
if(channelbaseInfo.channelType == "TACHOMETER"){
2023-10-19 14:15:31 +08:00
if(str == "偏置电压" || str == "最大正向峰值" || str == "最大负向峰值" || str == "平均值"){
pTextUnits = new QGraphicsTextItem("V");
}else{
pTextUnits = new QGraphicsTextItem("RPM");
}
2023-04-14 19:30:30 +08:00
}else if(channelbaseInfo.channelType == "ACCELEROMETER"){
if(str == "偏置电压"){
pTextUnits = new QGraphicsTextItem("V");
}
else if(str == "最大正向峰值" || str == "最大负向峰值" ||
str == "诊断峰峰值" || str == "平均值"){
2023-10-19 14:15:31 +08:00
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
}else if(str == "速度峰值" || str == "速度有效值"){
pTextUnits = new QGraphicsTextItem("mm/s");
2023-04-14 19:30:30 +08:00
}else{
2023-10-19 14:15:31 +08:00
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
2023-04-14 19:30:30 +08:00
}
}else if(channelbaseInfo.channelType == "PROXIMETER"){
2023-10-19 14:15:31 +08:00
if(str == "平均值"){
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
}
else if(str == "最大正向峰值" || str == "最大负向峰值" ||
2023-04-14 19:30:30 +08:00
str == "诊断峰峰值"){
2023-10-19 14:15:31 +08:00
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
2023-04-14 19:30:30 +08:00
}else{
2023-10-19 14:15:31 +08:00
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
2023-04-14 19:30:30 +08:00
}
}else if(channelbaseInfo.channelType == "THRUST"){
if(str == "平均值"){
2023-10-19 14:15:31 +08:00
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
}else if(str == "偏置电压"){
pTextUnits = new QGraphicsTextItem("V");
2023-04-14 19:30:30 +08:00
}else{
2023-10-19 14:15:31 +08:00
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
2023-04-14 19:30:30 +08:00
}
}else if(channelbaseInfo.channelType == "VELOCITY"){
2023-10-19 14:15:31 +08:00
if(str == "偏置电压"){
pTextUnits = new QGraphicsTextItem("V");
}else if(str == "有效值"){
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
}else if(str == "位移峰值" || str == "位移有效值"){
pTextUnits = new QGraphicsTextItem("um");
2023-04-14 19:30:30 +08:00
}else{
2023-10-19 14:15:31 +08:00
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
2023-04-14 19:30:30 +08:00
}
}else if(channelbaseInfo.channelType == "SLOW_CURRENT"){
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
2023-04-17 17:40:26 +08:00
}else if(channelbaseInfo.channelType == "FAST_VOLTAGE"){
2023-10-19 14:15:31 +08:00
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
}else if(channelbaseInfo.channelType == "PULSE_CURRENT"){
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
2023-04-17 17:40:26 +08:00
}
2023-04-14 19:30:30 +08:00
2023-10-19 14:15:31 +08:00
if(str == "峰值因子"){
pTextUnits = new QGraphicsTextItem("");
}
2023-04-14 19:30:30 +08:00
QGraphicsTextItem* pTextChannel = new QGraphicsTextItem(channelbaseInfo.channelName);
QGraphicsTextItem* pTextValue = new QGraphicsTextItem("0.0");
pTextUnits->setData(1,"units");
pTextChannel->setData(2,"channel");
pTextValue->setData(3,"value");
pTextValue->setData(4,str);
QFont font;
2024-03-14 09:35:39 +08:00
font.setPixelSize(16);
QFont font2 ( "黑体", 18, 50);
2023-04-14 19:30:30 +08:00
font.setFamily(QStringLiteral("黑体"));
pTextUnits->setFont(font);
pTextUnits->setDefaultTextColor(QColor(27, 30, 35));
pTextChannel->setFont(font);
pTextValue->setFont(font2);
2024-03-14 09:35:39 +08:00
pTextValue->setPos(150,0);
2023-04-14 19:30:30 +08:00
pTextValue->setDefaultTextColor(QColor(31, 81, 136));
2024-03-14 09:35:39 +08:00
pTextChannel->setPos(0,2);
2023-04-14 19:30:30 +08:00
pTextChannel->setDefaultTextColor(QColor(27, 30, 35));
2024-03-14 09:35:39 +08:00
pTextUnits->setPos(240,5);
2023-04-14 19:30:30 +08:00
// 设置可移动、可选择
pItemGroup->addToGroup(pTextChannel);
pItemGroup->addToGroup(pTextValue);
pItemGroup->addToGroup(pTextUnits);
pItemGroup->setData(0,channelbaseInfo.channelID);
if(ui->tabWidget->currentIndex() == 0){
m_pGraphicsScene->addItem(pItemGroup);
}else if(ui->tabWidget->currentIndex() == 1){
m_pGraphicsScene_2->addItem(pItemGroup);
}
}
void CRealTimeForm::SetCurDrawType(QString strType)
{
2023-04-27 19:48:15 +08:00
if(!m_EditMode){
QMessageBox::information(this, QStringLiteral("提示"), "请先进入编辑模式!");
return;
}
2023-04-14 19:30:30 +08:00
if(strType == "vertical"){
QGraphicsLineItem* pLine = new QGraphicsLineItem(0, 0, 100, 100);
2023-10-19 14:15:31 +08:00
pLine->setPos(0, 0);
2023-04-14 19:30:30 +08:00
pLine->setRotation(45);
pLine->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
2023-10-19 14:15:31 +08:00
pLine->setZValue(100);
2023-04-14 19:30:30 +08:00
if(ui->tabWidget->currentIndex() == 0){
m_pGraphicsScene->addItem(pLine);
}else if(ui->tabWidget->currentIndex() == 1){
m_pGraphicsScene_2->addItem(pLine);
}
}else if(strType == "Horizonta"){
QGraphicsLineItem* pLine = new QGraphicsLineItem(0, 0, 100, 100);
2023-10-19 14:15:31 +08:00
pLine->setPos(0, 0);
2023-04-14 19:30:30 +08:00
pLine->setRotation(-45);
pLine->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
2023-10-19 14:15:31 +08:00
pLine->setZValue(100);
2023-04-14 19:30:30 +08:00
if(ui->tabWidget->currentIndex() == 0){
m_pGraphicsScene->addItem(pLine);
}else if(ui->tabWidget->currentIndex() == 1){
m_pGraphicsScene_2->addItem(pLine);
}
}
else if(strType == "Channel"){
CAddChannel *pAddChannel = new CAddChannel();
pAddChannel->setWindowModality(Qt::ApplicationModal);
pAddChannel->show();
connect(pAddChannel,SIGNAL(addChannel_sg(channelBaseInfo,QString)),this,SLOT(on_addchannel(channelBaseInfo,QString)));
}else if (strType == "Pixmap"){
2023-04-27 19:48:15 +08:00
QString name = QCoreApplication::applicationDirPath() + "\\config\\UnitParameters.json";
QFile loadFile(name);
if(!loadFile.open(QIODevice::ReadOnly))
{
qDebug() << "could't open projects json";
return;
}
QString value = loadFile.readAll();
loadFile.close();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError)) {
QMessageBox::about(NULL, "提示", "读取文件错误!");
return;
}
QJsonObject jsonObject = document.object();
if (jsonObject.contains(QStringLiteral("UnitStyle"))) {
QJsonValue jsonValue = jsonObject.value(QStringLiteral("UnitStyle"));
QString strContent = jsonValue["content"].toString();
QGraphicsPixmapItem* pPixmap = NULL;
if(strContent == "混流式机组"){
pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/hunliushi.png"));
}else if(strContent == "轴流定桨式机组" || strContent == "轴流转浆式机组"){
pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/zhouliushi.png"));
}else if(strContent == "可逆式机组"){
pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.png"));
}else if(strContent == "灯泡式机组"){
pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/dengpaoshi.png"));
}
// 设置可移动、可选择
pPixmap->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
if(ui->tabWidget->currentIndex() == 0){
m_pGraphicsScene->addItem(pPixmap);
}else if(ui->tabWidget->currentIndex() == 1){
m_pGraphicsScene_2->addItem(pPixmap);
}
pPixmap->setPos(0,0);
2023-04-14 19:30:30 +08:00
}
}else if (strType == "Text") {
QGraphicsTextItem* pText = new QGraphicsTextItem("请输入...");
// 设置可移动、可选择
pText->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
pText->setTextInteractionFlags(Qt::TextEditorInteraction);
if(ui->tabWidget->currentIndex() == 0){
m_pGraphicsScene->addItem(pText);
}else if(ui->tabWidget->currentIndex() == 1){
m_pGraphicsScene_2->addItem(pText);
}
pText->setPos(0,0);
}else if (strType == "Save") {
SaveGraphicsConfig();
2023-10-19 14:15:31 +08:00
if(m_MachineStatus == 0){
LoadGraphicsConfig(2);
}else if(m_MachineStatus == 1){
LoadGraphicsConfig(0);
}
}else if(strType == "Rect"){
CustomRectItem *m_rect = new CustomRectItem();
m_rect->setPos(50, 50);
m_pGraphicsScene->addItem(m_rect);
m_rect->setRect(0, 0, 50, 50);
m_rect->setTransformOriginPoint(25, 25);
m_rect->setRotation(45);
2023-04-14 19:30:30 +08:00
}
2023-04-27 19:48:15 +08:00
2023-04-14 19:30:30 +08:00
ui->graphicsView->update();
}
void CRealTimeForm::SaveGraphicsConfig()
{
2023-04-27 19:48:15 +08:00
m_EditMode = 0;
2023-04-14 19:30:30 +08:00
QJsonObject jsonObject;
QJsonArray RectjsonArray;
QJsonArray LinejsonArray;
QJsonArray PixmapjsonArray;
QJsonArray TextjsonArray;
QJsonArray GroupjsonArray;
QList<QGraphicsItem *> items;
if(ui->tabWidget->currentIndex() == 0){
items = m_pGraphicsScene->items();
}else if(ui->tabWidget->currentIndex() == 1){
items = m_pGraphicsScene_2->items();
}
foreach (QGraphicsItem *item, items) {
QGraphicsItem* graphicsItem = static_cast<QGraphicsItem *>(item);
int itemType = graphicsItem->type();
2023-04-27 19:48:15 +08:00
//qDebug() << "itemType" << itemType << endl;
2023-04-14 19:30:30 +08:00
switch (itemType) {
// case 3: {//Rect
// QPointF pos = graphicsItem->pos();
// QRectF rect = graphicsItem->boundingRect();
// qDebug() << "Rect" << pos << rect;
// QJsonObject RectjsonObject;
// RectjsonObject.insert("x", pos.x());
// RectjsonObject.insert("y", pos.y());
// RectjsonObject.insert("w", rect.width());
// RectjsonObject.insert("h", rect.height());
// RectjsonArray.append(RectjsonObject);
// } break;
case 4://Ellipse
break;
case 6://Line
{
QPointF pos = graphicsItem->pos();
QRectF rect = graphicsItem->boundingRect();
2023-04-27 19:48:15 +08:00
//qDebug() << "Line" << pos << rect;
2023-04-14 19:30:30 +08:00
QJsonObject LinejsonObject;
LinejsonObject.insert("x", pos.x());
LinejsonObject.insert("y", pos.y());
LinejsonObject.insert("w", rect.width());
LinejsonObject.insert("h", rect.height());
LinejsonObject.insert("rotation", graphicsItem->rotation());
LinejsonArray.append(LinejsonObject);
}
break;
case 7://Pixmap
{
2023-04-27 19:48:15 +08:00
2023-04-14 19:30:30 +08:00
QPointF pos = graphicsItem->pos();
QRectF rect = graphicsItem->boundingRect();
2023-04-27 19:48:15 +08:00
//qDebug() << "Pixmap" << pos << rect;
2023-04-14 19:30:30 +08:00
QJsonObject PixmapjsonObject;
PixmapjsonObject.insert("x", pos.x());
PixmapjsonObject.insert("y", pos.y());
PixmapjsonObject.insert("w", rect.width());
PixmapjsonObject.insert("h", rect.height());
PixmapjsonArray.append(PixmapjsonObject);
}
break;
// case 8:{//Text
// QGraphicsTextItem* pGraphicTextItem = static_cast<QGraphicsTextItem *>(graphicsItem);
// QPointF pos = graphicsItem->pos();
// QRectF rect = graphicsItem->boundingRect();
// qDebug() << "Text" << pos << rect;
// qDebug() << pGraphicTextItem->toPlainText();
// QJsonObject TextjsonObject;
// TextjsonObject.insert("x", pos.x());
// TextjsonObject.insert("y", pos.y());
// TextjsonObject.insert("w", rect.width());
// TextjsonObject.insert("h", rect.height());
// TextjsonObject.insert("word", pGraphicTextItem->toPlainText());
// TextjsonArray.append(TextjsonObject);
// }
// break;
case 10:{
QGraphicsItemGroup* pGraphicGroupItem = static_cast<QGraphicsItemGroup *>(graphicsItem);
QPointF pos = pGraphicGroupItem->pos();
QRectF rect = pGraphicGroupItem->boundingRect();
channelBaseInfo temp;
//qDebug() << "Group" << pos << rect;
QString strChannelID = pGraphicGroupItem->data(0).toString();
2023-04-27 19:48:15 +08:00
//qDebug() << "pGraphicGroupItem data" << strChannelID << endl;
2023-04-14 19:30:30 +08:00
QJsonArray GroupRectjsonArray,GroupTextjsonArray;
QJsonObject itemjsonObject;
QList<QGraphicsItem *> items = pGraphicGroupItem->childItems();
foreach (QGraphicsItem *item, items) {
QString itemData,itemData2 = "";
for (int i = 0; i < 5; i++) {
itemData = item->data(i).toString();
if(itemData == "value"){
itemData2 = item->data(i+1).toString();
2023-04-27 19:48:15 +08:00
//qDebug() << "item va data" << itemData << itemData2 << i << endl;
2023-04-14 19:30:30 +08:00
break;
}else if (itemData == "channel") {
2023-04-27 19:48:15 +08:00
//qDebug() << "item ch data" << itemData << i << endl;
2023-04-14 19:30:30 +08:00
break;
}else if(itemData == "units"){
2023-04-27 19:48:15 +08:00
//qDebug() << "item un data" << itemData << i << endl;
2023-04-14 19:30:30 +08:00
break;
}
}
QGraphicsItem* graphicsItem = static_cast<QGraphicsItem *>(item);
int itemType = graphicsItem->type();
2023-04-27 19:48:15 +08:00
//qDebug() << "itemData2" << itemData << endl;
2023-04-14 19:30:30 +08:00
switch (itemType) {
case 3: {//Rect
QPointF pos = graphicsItem->pos();
QRectF rect = graphicsItem->boundingRect();
2023-04-27 19:48:15 +08:00
//qDebug() << "group Rect" << pos << rect;
2023-04-14 19:30:30 +08:00
QJsonObject RectjsonObject;
RectjsonObject.insert("x", pos.x());
RectjsonObject.insert("y", pos.y());
RectjsonObject.insert("w", rect.width());
RectjsonObject.insert("h", rect.height());
GroupRectjsonArray.append(RectjsonObject);
} break;
case 8:{//Text
QGraphicsTextItem* pGraphicTextItem = static_cast<QGraphicsTextItem *>(graphicsItem);
QPointF pos = graphicsItem->pos();
QRectF rect = graphicsItem->boundingRect();
QJsonObject TextjsonObject;
TextjsonObject.insert("x", pos.x());
TextjsonObject.insert("y", pos.y());
TextjsonObject.insert("w", rect.width());
TextjsonObject.insert("h", rect.height());
TextjsonObject.insert("data", itemData);
QColor color = pGraphicTextItem->defaultTextColor();
QRgb mRgb = qRgba(color.red(), color.green(), color.blue(), color.alpha());
TextjsonObject.insert("color",QString::number(mRgb, 16));
if(itemData2 != "")
TextjsonObject.insert("static", itemData2);
//qDebug() << "group Text" << pGraphicTextItem->toPlainText();
if(itemData == "units")
temp.channelUnit = pGraphicTextItem->toPlainText();
else if(itemData == "channel")
temp.channelName = pGraphicTextItem->toPlainText();
TextjsonObject.insert("word", pGraphicTextItem->toPlainText());
GroupTextjsonArray.append(TextjsonObject);
}break;
}
}
itemjsonObject.insert("Rect",GroupRectjsonArray);
itemjsonObject.insert("Text",GroupTextjsonArray);
itemjsonObject.insert("x",pos.x());
itemjsonObject.insert("y",pos.y());
itemjsonObject.insert("data",strChannelID);
GroupjsonArray.append(itemjsonObject);
temp.channelID = strChannelID;
g_ChannelView.append(temp);
}break;
2023-10-19 14:15:31 +08:00
default:
break;
2023-04-14 19:30:30 +08:00
}
}
jsonObject.insert("Rect", RectjsonArray);
jsonObject.insert("Line", LinejsonArray);
jsonObject.insert("Pixmap", PixmapjsonArray);
jsonObject.insert("Text", TextjsonArray);
jsonObject.insert("Group", GroupjsonArray);
QString fileName;
if(ui->tabWidget->currentIndex() == 0){
fileName = QCoreApplication::applicationDirPath() + "\\config\\Graph1.json";
}else{
fileName = QCoreApplication::applicationDirPath() + "\\config\\Graph2.json";
}
QJsonDocument jsonDoc;
jsonDoc.setObject(jsonObject);
//QString fileName = QFileDialog::getSaveFileName(this,"另存为 ","xxx.json");
//if(!fileName.isEmpty())
{
qDebug() << "另存为" << fileName;
QFile file(fileName);
//if(!file.exists())
{
file.open(QIODevice::WriteOnly);
file.write(jsonDoc.toJson());
file.close();
}
}
}
void CRealTimeForm::slotDoubleClick(QGraphicsSceneMouseEvent *event)
{
qDebug() << "slotDoubleClick" << event->pos() << endl;
QGraphicsItem *item = m_pGraphicsScene->itemAt(event->scenePos(),QTransform());
QGraphicsItemGroup* pGraphicGroupItem = static_cast<QGraphicsItemGroup *>(item);
qDebug() << "QGraphicsItem" << pGraphicGroupItem->childItems() << endl;
}
2023-04-27 19:48:15 +08:00
void CRealTimeForm::LoadGraphicsConfig(int type)
2023-04-14 19:30:30 +08:00
{
//读取图元的数据
m_pGraphicsScene->clear();
m_pGraphicsScene_2->clear();
QPen pen; // 定义一个画笔,设置画笔颜色和宽度
pen.setColor(QColor(0, 0, 0,0));
pen.setWidth(1);
//QString fileName =QFileDialog::getOpenFileName(this,"打开文件",QDir::currentPath(), "*.json");
for (int ii = 0; ii < ui->tabWidget->count(); ii++) {
2023-10-19 14:15:31 +08:00
QString strFileName = QString("Graph%1.json").arg(ii+1);
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\" + strFileName;
2023-04-27 19:48:15 +08:00
qDebug() << "打开" << fileName ;
2023-10-19 14:15:31 +08:00
if(!fileName.isEmpty())
{
QFile file(fileName);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString value = file.readAll();
file.close();
2023-04-14 19:30:30 +08:00
2023-10-19 14:15:31 +08:00
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError)) {
QMessageBox::about(NULL, "提示", "读取文件错误!");
return;
}
QJsonObject jsonObject = document.object();
// Line字段
if (jsonObject.contains(QStringLiteral("Line"))) {
QJsonValue arrayValue = jsonObject.value(QStringLiteral("Line"));
if (arrayValue.isArray()) {
QJsonArray array = arrayValue.toArray();
for (int i = 0; i < array.size(); i++) {
QJsonValue nameArray = array.at(i);
QJsonObject key = nameArray.toObject();
QGraphicsLineItem *pLine = new QGraphicsLineItem(
0,
0,
key["w"].toDouble(), key["h"].toDouble());
pLine->setPos(key["x"].toDouble(), key["y"].toDouble());
pLine->setRotation(key["rotation"].toInt());
pLine->setZValue(100);
if(type)
pLine->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
if(ii == 0){
m_pGraphicsScene->addItem(pLine);
}else if(ii == 1){
m_pGraphicsScene_2->addItem(pLine);
2023-04-14 19:30:30 +08:00
}
}
2023-10-19 14:15:31 +08:00
}
}
// Rect字段
if (jsonObject.contains(QStringLiteral("Rect"))) {
QJsonValue arrayValue = jsonObject.value(QStringLiteral("Rect"));
if (arrayValue.isArray()) {
QJsonArray array = arrayValue.toArray();
for (int i = 0; i < array.size(); i++) {
QJsonValue nameArray = array.at(i);
QJsonObject key = nameArray.toObject();
QGraphicsRectItem *pRect = new QGraphicsRectItem(
0,
0,
key["w"].toDouble(), key["h"].toDouble());
pRect->setPos(key["x"].toDouble(), key["y"].toDouble());
if(type)
pRect->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
if(ii == 0){
m_pGraphicsScene->addItem(pRect);
}else if(ii == 1){
m_pGraphicsScene_2->addItem(pRect);
2023-04-14 19:30:30 +08:00
}
}
2023-10-19 14:15:31 +08:00
}
}
// Pixmap字段
if (jsonObject.contains(QStringLiteral("Pixmap"))) {
QJsonValue arrayValue = jsonObject.value(QStringLiteral("Pixmap"));
if (arrayValue.isArray()) {
QJsonArray array = arrayValue.toArray();
for (int i = 0; i < array.size(); i++) {
QJsonValue nameArray = array.at(i);
QJsonObject key = nameArray.toObject();
QString name = QCoreApplication::applicationDirPath() + "\\config\\UnitParameters.json";
QFile loadFile(name);
if(!loadFile.open(QIODevice::ReadOnly))
{
qDebug() << "could't open projects json";
return;
}
QString value = loadFile.readAll();
loadFile.close();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError)) {
QMessageBox::about(NULL, "提示", "读取文件错误!");
return;
}
2023-04-14 19:30:30 +08:00
2023-10-19 14:15:31 +08:00
QJsonObject jsonObject = document.object();
if (jsonObject.contains(QStringLiteral("UnitStyle"))) {
QJsonValue jsonValue = jsonObject.value(QStringLiteral("UnitStyle"));
QString strContent = jsonValue["content"].toString();
QGraphicsPixmapItem* pPixmap = NULL;
QLabel *gif_anim = new QLabel();
QMovie *movie = NULL;
qDebug() << "strContent" << strContent << endl;
if(strContent == "混流式机组"){
if(type == 1 || type == 2)
pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/hunliushi.png"));
else
movie = new QMovie(QCoreApplication::applicationDirPath() + "/image/unit/hunliushi.gif");
}else if(strContent == "轴流定桨式机组" || strContent == "轴流转浆式机组"){
if(type == 1 || type == 2)
pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/zhouliushi.png"));
else
movie = new QMovie(QCoreApplication::applicationDirPath() + "/image/unit/zhouliushi.gif");
//pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/zhouliushi.png"));
}else if(strContent == "可逆式机组"){
if(type == 1 || type == 2)
pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.png"));
else
movie = new QMovie(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.gif");
//pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.png"));
}else if(strContent == "灯泡式机组"){
if(type == 1 || type == 2)
pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/dengpaoshi.png"));
else
movie = new QMovie(QCoreApplication::applicationDirPath() + "/image/unit/dengpaoshi.gif");
}
qDebug() << "type" << type << ii << endl;
if(type){
pPixmap->setPos(key["x"].toInt(), key["y"].toInt());
// 设置可移动、可选择
if(type == 1){
pPixmap->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
}
if(ii == 0){
m_pGraphicsScene->addItem(pPixmap);
}else if(ii == 1){
m_pGraphicsScene_2->addItem(pPixmap);
}
}else{
gif_anim->setMovie(movie);
movie->start();
QGraphicsProxyWidget *proxy = NULL;
if(ii == 0){
qDebug() << "strContent111" << strContent << endl;
proxy = m_pGraphicsScene->addWidget(gif_anim);
}else if(ii == 1){
proxy = m_pGraphicsScene_2->addWidget(gif_anim);
}
proxy->setGeometry(QRectF(key["x"].toInt(),key["y"].toInt(),0,0));
}
}
// QGraphicsPixmapItem *pPixmap = new QGraphicsPixmapItem(QPixmap(":/image/1.png"));
// pPixmap->setPos(key["x"].toInt(), key["y"].toInt());
// pPixmap->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
// if(ii == 0){
// m_pGraphicsScene->addItem(pPixmap);
// }else if(ii == 1){
// m_pGraphicsScene_2->addItem(pPixmap);
// }
// QLabel *gif_anim = new QLabel();
// QMovie *movie = new QMovie(":/image/1.gif");
// gif_anim->setMovie(movie);
// movie->start();
// QGraphicsProxyWidget *proxy = m_pGraphicsScene->addWidget(gif_anim);
// QGraphicsMovieItem *pPixmap = new QGraphicsMovieItem();
// pPixmap->setPos(key["x"].toInt(), key["y"].toInt());
// QMovie movie(":/image/1.png");
// pPixmap->setMovie(&movie);
// movie.start();
// m_pGraphicsScene->addItem(pPixmap);
}
}
}
// Text字段
if (jsonObject.contains(QStringLiteral("Text"))) {
if(type == 1){
QGraphicsTextItem *pText = new QGraphicsTextItem("正在编辑中...");
pText->setPos(300, 530);
pText->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
QFont font ( "黑体", 20, 50);
font.setPixelSize(30);
pText->setDefaultTextColor(QColor(255, 0, 0));
pText->setFont(font);
2023-04-14 19:30:30 +08:00
if(ii == 0){
2023-10-19 14:15:31 +08:00
m_pGraphicsScene->addItem(pText);
2023-04-14 19:30:30 +08:00
}else if(ii == 1){
2023-10-19 14:15:31 +08:00
m_pGraphicsScene_2->addItem(pText);
2023-04-14 19:30:30 +08:00
}
2023-10-19 14:15:31 +08:00
}
QJsonValue arrayValue = jsonObject.value(QStringLiteral("Text"));
if (arrayValue.isArray()) {
QJsonArray array = arrayValue.toArray();
for (int i = 0; i < array.size(); i++) {
QJsonValue nameArray = array.at(i);
QJsonObject key = nameArray.toObject();
QGraphicsTextItem *pText = new QGraphicsTextItem(key["word"].toString());
pText->setPos(key["x"].toInt(), key["y"].toInt());
pText->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
pText->setTextInteractionFlags(Qt::TextEditorInteraction);
QFont font;
font.setPixelSize(25);
pText->setFont(font);
if(ii == 0){
m_pGraphicsScene->addItem(pText);
}else if(ii == 1){
m_pGraphicsScene_2->addItem(pText);
}
}
}
}
// Group字段
if (jsonObject.contains(QStringLiteral("Group"))) {
QJsonValue arrayValue = jsonObject.value(QStringLiteral("Group"));
if (arrayValue.isArray()) {
QJsonArray array = arrayValue.toArray();
for (int i = 0; i < array.size(); i++) {
channelBaseInfo temp;
CMyCustomGraphicsItem* pItemGroup = new CMyCustomGraphicsItem();
if(type == 1)
pItemGroup->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
connect(pItemGroup, SIGNAL(doubleclick(QGraphicsSceneMouseEvent*)), this, SLOT(slotDoubleClick(QGraphicsSceneMouseEvent*)));
//qDebug() << array.at(i)["x"].toDouble() << array.at(i)["y"].toDouble() << endl;
QJsonObject jsonObject = array.at(i).toObject();
if (jsonObject.contains(QStringLiteral("Rect"))) {
QJsonValue arrayValue = jsonObject.value(QStringLiteral("Rect"));
if (arrayValue.isArray()) {
QJsonArray array = arrayValue.toArray();
for (int i = 0; i < array.size(); i++) {
QJsonValue nameArray = array.at(i);
QJsonObject key = nameArray.toObject();
QGraphicsRectItem *pRect = new QGraphicsRectItem(
0,
0,
2024-03-14 09:35:39 +08:00
290, 30);
2023-10-19 14:15:31 +08:00
pRect->setPos(key["x"].toDouble(), key["y"].toDouble());
if(type == 1)
pRect->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
pRect->setBrush(QBrush(QColor(255, 255, 255)));
pRect->setPen(pen);
pItemGroup->addToGroup(pRect);
}
}
}
if (jsonObject.contains(QStringLiteral("Text"))) {
QJsonValue arrayValue = jsonObject.value(QStringLiteral("Text"));
if (arrayValue.isArray()) {
QJsonArray array = arrayValue.toArray();
for (int i = 0; i < array.size(); i++) {
QJsonValue nameArray = array.at(i);
QJsonObject key = nameArray.toObject();
QGraphicsTextItem *pText = new QGraphicsTextItem(key["word"].toString());
pText->setPos(key["x"].toDouble(), key["y"].toDouble());
if(type){
pText->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
pText->setTextInteractionFlags(Qt::TextEditorInteraction);
}
QFont font;
2024-03-14 09:35:39 +08:00
QFont font2 ( "黑体", 18, 50);
font.setPixelSize(16);
2023-10-19 14:15:31 +08:00
font.setFamily(QStringLiteral("黑体"));
pText->setFont(font);
if(key["data"].toString() == "units"){
pText->setData(1,"units");
pText->setDefaultTextColor(QColor(27, 30, 35));
temp.channelUnit = key["word"].toString();
}else if(key["data"].toString() == "channel"){
pText->setData(2,"channel");
pText->setDefaultTextColor(QColor(27, 30, 35));
temp.channelName = key["word"].toString();
}else if(key["data"].toString() == "value"){
pText->setData(3,"value");
pText->setData(4,key["static"].toString());
pText->setDefaultTextColor(QColor(31, 81, 136));
pText->setFont(font2);
}
pItemGroup->addToGroup(pText);
}
}
}
pItemGroup->setPos(array.at(i)["x"].toDouble() , array.at(i)["y"].toDouble());
pItemGroup->setData(0,array.at(i)["data"].toString());
if(ii == 0){
m_pGraphicsScene->addItem(pItemGroup);
}else if(ii == 1){
m_pGraphicsScene_2->addItem(pItemGroup);
}
temp.channelID = array.at(i)["data"].toString();
g_ChannelView.append(temp);
}
}
}
}
2023-04-14 19:30:30 +08:00
}
}
void CRealTimeForm::keyPressEvent(QKeyEvent *event)
{
//QGraphicsItem::keyPressEvent(event);
qDebug() << "键盘按下";
if (event->key() == Qt::Key_Delete)
{
qDebug() << "press Key_Delete";
if(ui->tabWidget->currentIndex() == 0){
QList<QGraphicsItem *> items = m_pGraphicsScene->items();
foreach (QGraphicsItem *item, items) {
QGraphicsItem* graphicsItem = static_cast<QGraphicsItem *>(item);
if(graphicsItem->isSelected()){
qDebug() << "delete Item";
m_pGraphicsScene->removeItem(graphicsItem);
}
}
}else if(ui->tabWidget->currentIndex() == 1){
QList<QGraphicsItem *> items = m_pGraphicsScene_2->items();
foreach (QGraphicsItem *item, items) {
QGraphicsItem* graphicsItem = static_cast<QGraphicsItem *>(item);
if(graphicsItem->isSelected()){
qDebug() << "delete Item";
m_pGraphicsScene_2->removeItem(graphicsItem);
}
}
}
return;
}
//
}
void CRealTimeForm::UpdateCharacteristic(QVector<_Charateristic>& m_vecCharateristic)
{
2023-04-27 19:48:15 +08:00
QString RPM = "0";
2023-04-14 19:30:30 +08:00
if(m_vecCharateristic.size() > 0){
for (int i = 0; i < m_vecCharateristic.size(); i++) {
QList<QGraphicsItem *> items;
if(ui->tabWidget->currentIndex() == 0){
items = m_pGraphicsScene->items();
}else if(ui->tabWidget->currentIndex() == 1){
items = m_pGraphicsScene_2->items();
}
foreach (QGraphicsItem *item, items) {
QGraphicsItem* graphicsItem = static_cast<QGraphicsItem *>(item);
int itemType = graphicsItem->type();
switch (itemType) {
case 10:{
QGraphicsItemGroup* pGraphicGroupItem = static_cast<QGraphicsItemGroup *>(graphicsItem);
channelBaseInfo temp;
QString strChannelID = pGraphicGroupItem->data(0).toString();
if(strChannelID != m_vecCharateristic[i].ChannelID)
continue;
QJsonObject itemjsonObject;
QList<QGraphicsItem *> items = pGraphicGroupItem->childItems();
QString itemData,itemData2 = "";
foreach (QGraphicsItem *item, items){
for (int i = 0; i < 5; i++){
itemData = item->data(i).toString();
if(itemData == "value"){
itemData2 = item->data(i+1).toString();
//qDebug() << "item va data" << itemData << itemData2 << i << endl;
break;
}else if (itemData == "channel"){
break;
}else if(itemData == "units"){
break;
}
}
QGraphicsItem* graphicsItem = static_cast<QGraphicsItem *>(item);
int itemType = graphicsItem->type();
switch (itemType) {
case 8:{//Text
QGraphicsTextItem* pGraphicTextItem = static_cast<QGraphicsTextItem *>(graphicsItem);
if(itemData == "value"){
//qDebug() << strChannelID << "itemData" <<itemData << "itemData2" << itemData2 << m_vecCharateristic[i].speedRPM<<endl;
QString str = "";
if(itemData2 == "转速"){
2023-10-19 14:15:31 +08:00
str = QString("%1").arg(QString::number(m_vecCharateristic[i].speedRPM, 'f', m_vecCharateristic[i].ChUnitDot));
2023-04-14 19:30:30 +08:00
RPM = str;
}else if(itemData2 == "最大正向峰值"){
2023-10-19 14:15:31 +08:00
str = QString("%1").arg(QString::number(m_vecCharateristic[i].MaxValues, 'f', m_vecCharateristic[i].ChUnitDot));
2023-04-14 19:30:30 +08:00
}else if(itemData2 == "最大负向峰值"){
2023-10-19 14:15:31 +08:00
str = QString("%1").arg(QString::number(m_vecCharateristic[i].MinValues, 'f', m_vecCharateristic[i].ChUnitDot));
2023-04-14 19:30:30 +08:00
}else if(itemData2 == "监测保护峰峰值"){
2023-10-19 14:15:31 +08:00
str = QString("%1").arg(QString::number(m_vecCharateristic[i].MonitorPk2Pk, 'f', m_vecCharateristic[i].ChUnitDot));
2023-04-14 19:30:30 +08:00
}else if(itemData2 == "诊断峰峰值"){
2023-10-19 14:15:31 +08:00
str = QString("%1").arg(QString::number(m_vecCharateristic[i].DiagnosisPk2Pk, 'f', m_vecCharateristic[i].ChUnitDot));
}else if(itemData2 == "速度有效值" || itemData2 == "位移有效值"){
str = QString("%1").arg(QString::number(m_vecCharateristic[i].IntegratRMS, 'f', m_vecCharateristic[i].ChUnitDot));
}else if(itemData2 == "速度峰值" || itemData2 == "位移峰值" ){
str = QString("%1").arg(QString::number(m_vecCharateristic[i].IntegratPk2Pk2, 'f', m_vecCharateristic[i].ChUnitDot));
2023-04-14 19:30:30 +08:00
}else if(itemData2 == "加速度峰值因子"){
2023-10-19 14:15:31 +08:00
str = QString("%1").arg(QString::number(m_vecCharateristic[i].CrestFactor, 'f', m_vecCharateristic[i].ChUnitDot));
2023-04-14 19:30:30 +08:00
}else if(itemData2 == "推导峰值"){
2023-10-19 14:15:31 +08:00
str = QString("%1").arg(QString::number(m_vecCharateristic[i].DerivedPeak, 'f', m_vecCharateristic[i].ChUnitDot));
2023-04-14 19:30:30 +08:00
}else if(itemData2 == "偏置电压"){
2023-10-19 14:15:31 +08:00
str = QString("%1").arg(QString::number(m_vecCharateristic[i].DCValues, 'f', m_vecCharateristic[i].ChUnitDot));
}else if(itemData2 == "有效值"){
str = QString("%1").arg(QString::number(m_vecCharateristic[i].RMSValues, 'f', m_vecCharateristic[i].ChUnitDot));
}else if(itemData2 == "峰值因子"){
str = QString("%1").arg(QString::number(m_vecCharateristic[i].CrestFactor, 'f', m_vecCharateristic[i].ChUnitDot));
}else if(itemData2 == "峰值"){
str = QString("%1").arg(QString::number(m_vecCharateristic[i].DiagnosisPeak, 'f', m_vecCharateristic[i].ChUnitDot));
}else if(itemData2 == "平均值"){
str = QString("%1").arg(QString::number(m_vecCharateristic[i].DCValues, 'f', m_vecCharateristic[i].ChUnitDot));
2023-04-14 19:30:30 +08:00
}else{
2023-10-19 14:15:31 +08:00
str = QString("%1").arg(QString::number(m_vecCharateristic[i].DCValues, 'f', m_vecCharateristic[i].ChUnitDot));
}
2024-03-14 09:35:39 +08:00
int flag = -1;
if((g_mapTriggerEvent[strChannelID].DangerOver == 1 || g_mapTriggerEvent[strChannelID].DangerUnder == 1) \
&& itemData2 == g_mapTriggerEvent[strChannelID].Characteristic){
if((str.toFloat() < g_mapTriggerEvent[strChannelID].DangerUnderSetpoint.toFloat() && g_mapTriggerEvent[strChannelID].DangerUnder == 1) ||
(str.toFloat() > g_mapTriggerEvent[strChannelID].DangerOverSetpoint.toFloat() && g_mapTriggerEvent[strChannelID].DangerOver == 1)){
pGraphicTextItem->setDefaultTextColor(QColor(255, 0, 0));
flag = 1;
}
else{
pGraphicTextItem->setDefaultTextColor(QColor(31, 81, 136));
}
}
if((g_mapTriggerEvent[strChannelID].AlertOver == 1 || g_mapTriggerEvent[strChannelID].AlertUnder == 1) \
&& itemData2 == g_mapTriggerEvent[strChannelID].Characteristic && flag == -1){
QString strLog = "警报" + str + "," + g_mapTriggerEvent[strChannelID].AlertUnderSetpoint + "," + g_mapTriggerEvent[strChannelID].AlertOverSetpoint;
if((str.toFloat() < g_mapTriggerEvent[strChannelID].AlertUnderSetpoint.toFloat() && g_mapTriggerEvent[strChannelID].AlertUnder == 1 \
&& g_mapTriggerEvent[strChannelID].DangerUnder == 1 && str.toFloat() > g_mapTriggerEvent[strChannelID].DangerUnderSetpoint.toFloat()) ||\
(str.toFloat() > g_mapTriggerEvent[strChannelID].AlertOverSetpoint.toFloat() && g_mapTriggerEvent[strChannelID].AlertOver == 1 \
&& g_mapTriggerEvent[strChannelID].DangerOver == 0 ) ||\
(str.toFloat() > g_mapTriggerEvent[strChannelID].AlertOverSetpoint.toFloat() && g_mapTriggerEvent[strChannelID].AlertOver == 1 \
&& g_mapTriggerEvent[strChannelID].DangerOver == 1 && str.toFloat() < g_mapTriggerEvent[strChannelID].DangerOverSetpoint.toFloat())){
pGraphicTextItem->setDefaultTextColor(QColor(255, 165, 0));
}
else{
pGraphicTextItem->setDefaultTextColor(QColor(31, 81, 136));
}
2023-04-14 19:30:30 +08:00
}
sigRPM(RPM);
pGraphicTextItem->setPlainText(str);
}
}break;
}
}
}break;
}
}
}
if(ui->tabWidget->currentIndex() == 0){
ui->graphicsView->update();
}else if(ui->tabWidget->currentIndex() == 1){
ui->graphicsView_2->update();
}
}
}
void CRealTimeForm::ParseCharacteristic(QJsonArray& arrayValue)
{
m_vecCharateristic.clear();
g_Charateristic.clear();
QVector<Charateristic_t>().swap(m_vecCharateristic);
QVector<Charateristic_t>().swap(g_Charateristic);
_Charateristic tempCharateristic;
for (int i = 0; i < arrayValue.size(); i++) {
2024-03-14 09:35:39 +08:00
int enable = arrayValue.at(i)["isEnable"].toDouble();
if(enable == 1){
tempCharateristic.Amp1x = arrayValue.at(i)["1xAmp"].toDouble();
tempCharateristic.Phase1x = arrayValue.at(i)["1xPhase"].toDouble();
tempCharateristic.ChannelID = arrayValue.at(i)["ChannelId"].toString();
tempCharateristic.ChannelName = arrayValue.at(i)["ChannelName"].toString();
tempCharateristic.CrestFactor = arrayValue.at(i)["CrestFactor"].toDouble();
tempCharateristic.DCValues = arrayValue.at(i)["DCValues"].toDouble();
tempCharateristic.DerivedPeak = arrayValue.at(i)["DerivedPeak"].toDouble();
tempCharateristic.DiagnosisPeak = arrayValue.at(i)["DiagnosisPeak"].toDouble();
tempCharateristic.DiagnosisPk2Pk = arrayValue.at(i)["DiagnosisPk2Pk"].toDouble();
tempCharateristic.DirectPK = arrayValue.at(i)["DirectPK"].toDouble();
tempCharateristic.FullScalePosition = arrayValue.at(i)["FullScalePosition"].toDouble();
tempCharateristic.Gap = arrayValue.at(i)["Gap"].toDouble();
tempCharateristic.IntegratPk2Pk2 = arrayValue.at(i)["IntegratPk2Pk/2"].toDouble();
tempCharateristic.IntegratRMS = arrayValue.at(i)["IntegratRMS"].toDouble();
tempCharateristic.MaxValues = arrayValue.at(i)["MaxValues"].toDouble();
tempCharateristic.MinValues = arrayValue.at(i)["MinValues"].toDouble();
tempCharateristic.MonitorPk2Pk = arrayValue.at(i)["MonitorPk2Pk"].toDouble();
tempCharateristic.Position = arrayValue.at(i)["Position"].toDouble();
tempCharateristic.RmsPkPk2Pk = arrayValue.at(i)["RmsPkPk2Pk"].toDouble();
tempCharateristic.SensorEngineeringUnit = arrayValue.at(i)["SensorEngineeringUnit"].toString();
tempCharateristic.SensorStatus = arrayValue.at(i)["SensorStatus"].toDouble();
tempCharateristic.ZeroScalePosition = arrayValue.at(i)["ZeroScalePosition"].toDouble();
tempCharateristic.xFullScalePosition = arrayValue.at(i)["xFullScalePosition"].toDouble();
tempCharateristic.xProcessVariableName = arrayValue.at(i)["xProcessVariableName"].toString();
tempCharateristic.xZeroScalePosition = arrayValue.at(i)["xZeroScalePosition"].toDouble();
tempCharateristic.RMSValues = arrayValue.at(i)["RMSValues"].toDouble();
tempCharateristic.speedRPM = arrayValue.at(i)["SpeedProfileSpeed"].toDouble();
tempCharateristic.ChUnitDot = arrayValue.at(i)["ChUnitDot"].toInt();
tempCharateristic.channelType = arrayValue.at(i)["ChannelType"].toString();
m_vecCharateristic.push_back(tempCharateristic);
g_Charateristic.push_back(tempCharateristic);
}
2023-04-14 19:30:30 +08:00
}
UpdateCharacteristic(m_vecCharateristic);
}
// 接受服务返回的数据
void CRealTimeForm::slotRecieve()
{
QByteArray arrayReady = m_pSocket->readAll();
m_arrayReady += arrayReady;
2023-04-27 19:48:15 +08:00
// customLogMessageHandler(QtDebugMsg,m_arrayReady);
// qDebug() << "arrayReady" << arrayReady << endl;
// QJsonDocument doc = QJsonDocument::fromJson(arrayReady);
// QJsonObject objec = doc.object();
// if(objec.contains("cmd"))
// {
// QJsonValue arrays_value = objec.take("cmd");
// qDebug()<<"cmd ="<<arrays_value.toString();
// if(arrays_value.toString() == "09"){
// QJsonArray arrayValue = objec["content"].toArray();
// QJsonArray arrayValueDIs = objec["DIO_Board_DIs"].toArray();
// QJsonArray arrayValueDOs = objec["DIO_Board_DOs"].toArray();
// ParseCharacteristic(arrayValue);
// QString strTrgStatus = objec["currentTriggerStatus"].toString();
// QString strWCStatus = objec["currentWorkCondition"].toString();
// QString str = strTrgStatus + "," + strWCStatus;
// sigWCStatus(str);
// sigDOStatus(arrayValueDIs,arrayValueDOs);
// }
// }
2023-04-14 19:30:30 +08:00
}
void CRealTimeForm::disConnect()
{
QJsonDocument doc = QJsonDocument::fromJson(m_arrayReady);
QJsonObject objec = doc.object();
2023-10-19 14:15:31 +08:00
if(m_RealtimeLog == 1)
customLogMessageHandler(QtDebugMsg,QString(QJsonDocument(objec).toJson()));
2023-04-14 19:30:30 +08:00
if(objec.contains("cmd"))
{
QJsonValue arrays_value = objec.take("cmd");
2023-10-19 14:15:31 +08:00
//qDebug()<<"cmd ="<<arrays_value.toString();
2023-04-14 19:30:30 +08:00
if(arrays_value.toString() == "09"){
2023-10-19 14:15:31 +08:00
//qDebug()<<"cmd ="<<arrays_value.toString();
2023-04-14 19:30:30 +08:00
QJsonArray arrayValue = objec["content"].toArray();
QJsonArray arrayValueDIs = objec["DIO_Board_DIs"].toArray();
QJsonArray arrayValueDOs = objec["DIO_Board_DOs"].toArray();
ParseCharacteristic(arrayValue);
QString strTrgStatus = objec["currentTriggerStatus"].toString();
QString strWCStatus = objec["currentWorkCondition"].toString();
2023-10-19 14:15:31 +08:00
QString strinvalid_ch = objec["invalid_ch_num"].toString();
QString str = strTrgStatus + "," + strWCStatus + "," + strinvalid_ch;
2023-04-14 19:30:30 +08:00
sigWCStatus(str);
sigDOStatus(arrayValueDIs,arrayValueDOs);
2023-10-19 14:15:31 +08:00
if(strWCStatus.contains("停机")){
if(m_MachineStatus == 1){
LoadGraphicsConfig(2);
}
m_MachineStatus = 0;
}else {
if(m_MachineStatus == 0){
LoadGraphicsConfig(0);
}
m_MachineStatus = 1;
}
2023-04-14 19:30:30 +08:00
}
}
m_arrayReady = "";
}
void CRealTimeForm::slotNetMgr(QString sAddr, const QVariant &msg)
{
QJsonObject objec = msg.value<QJsonObject>();
if(objec.contains("cmd"))
{
QJsonValue arrays_value = objec.take("cmd");
//qDebug()<<"cmd ="<<arrays_value.toString();
if(arrays_value.toString() == "09"){
QJsonArray arrayValue = objec["content"].toArray();
QJsonArray arrayValueDIs = objec["DIO_Board_DIs"].toArray();
QJsonArray arrayValueDOs = objec["DIO_Board_DOs"].toArray();
ParseCharacteristic(arrayValue);
QString strTrgStatus = objec["currentTriggerStatus"].toString();
QString strWCStatus = objec["currentWorkCondition"].toString();
QString str = strTrgStatus + "," + strWCStatus;
sigWCStatus(str);
sigDOStatus(arrayValueDIs,arrayValueDOs);
}
}
}
void CRealTimeForm::mouseDoubleClickEvent(QMouseEvent* e)
{
QGraphicsItem* currentItem = m_pGraphicsScene->focusItem();
QGraphicsSceneEvent* mouseEvent = (QGraphicsSceneEvent*)e;
qDebug() << "event->type():" << mouseEvent->type();
if (e->type() == QEvent::MouseButtonDblClick)
{
qDebug() << "Double Click"; // 注意这里一定要返回true表示你要过滤该事件原本的实现
QList<QGraphicsItem *> items = m_pGraphicsScene->items();
foreach (QGraphicsItem *item, items) {
qDebug() << "Double items";
QGraphicsItem* graphicsItem = static_cast<QGraphicsItem *>(item);
if(graphicsItem->isSelected()){
qDebug() << "Double Click Item";
}
}
}
}