1315 lines
63 KiB
C++
1315 lines
63 KiB
C++
#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>
|
||
#include "QGraphicsMovieItem.h"
|
||
#include <QLabel>
|
||
#include "log.h"
|
||
#include <QSettings>
|
||
#include "customrectitem.h"
|
||
#include "mygraphicrectitem.h"
|
||
|
||
|
||
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();
|
||
m_pGraphicsScene->setSceneRect(0,0,600,550);
|
||
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();
|
||
m_pGraphicsScene_2->setSceneRect(0,0,600,550);
|
||
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)));
|
||
|
||
m_EditMode = 0;
|
||
m_MachineStatus = 1;
|
||
//读取ini
|
||
QSettings settingsread(QCoreApplication::applicationDirPath() + "\\config\\config.ini",QSettings::IniFormat);
|
||
m_RealtimeLog = settingsread.value("Log/realtime").toInt();
|
||
|
||
LoadGraphicsConfig(0);
|
||
InitChannelInfo();
|
||
|
||
|
||
//m_strServerIp = IP;
|
||
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
|
||
id1 = startTimer(2000); //参数1 间隔 单位 毫秒
|
||
//定时器第二种方式
|
||
QTimer * timer = new QTimer(this);
|
||
//启动定时器
|
||
timer->start(500);
|
||
#endif
|
||
}
|
||
|
||
CRealTimeForm::~CRealTimeForm()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
void CRealTimeForm::timerEvent(QTimerEvent *ev)
|
||
{
|
||
if(ev->timerId() == id1)
|
||
{
|
||
QJsonObject allObj;
|
||
allObj.insert("cmd", "09");
|
||
// 设置IP和端口号连接
|
||
m_pSocket->connectToHost(IP, m_nServerPort);
|
||
|
||
// 设置超时连接时间
|
||
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()));
|
||
|
||
if(nRet !=0){
|
||
//qDebug() << "09 通信失败" << endl;
|
||
//customLogMessageHandler(QtWarningMsg,"09通信失败");
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
void CRealTimeForm::InitChannelInfo()
|
||
{
|
||
g_channelSetting = g_SqliteDB->GetDataMultiLine("t_ChannelSetting");
|
||
g_ChannelBaseInfo.clear();
|
||
QVector<channelBaseInfo>().swap(g_ChannelBaseInfo);
|
||
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;
|
||
tempchannelbaseinfo.pairChannelId = g_channelSetting[i].pairChannelId;
|
||
tempchannelbaseinfo.speedRefChannelId = g_channelSetting[i].speedRefChannelId;
|
||
tempchannelbaseinfo.isEnable = g_channelSetting[i].isEnable;
|
||
tempchannelbaseinfo.ChUnitDot = g_channelSetting[i].ChUnitDot;
|
||
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;
|
||
QMenu menu(this);
|
||
pActionVerticalLine = menu.addAction("添加竖线");
|
||
pActionHorizontalLine = menu.addAction("添加横线");
|
||
pActionRect = menu.addAction("添加通道");
|
||
pActionRect2 = menu.addAction("矩形框");
|
||
pActionPixmap = menu.addAction("添加图片");
|
||
pActionText = menu.addAction("添加文字");
|
||
pActionEdit = menu.addAction("编辑");
|
||
pActionSave = menu.addAction("保存");
|
||
|
||
pActionVerticalLine->setData(1);
|
||
pActionHorizontalLine->setData(2);
|
||
pActionRect->setData(3);
|
||
pActionPixmap->setData(4);
|
||
pActionText->setData(5);
|
||
pActionSave->setData(6);
|
||
pActionEdit->setData(7);
|
||
pActionRect2->setData(8);
|
||
|
||
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()));
|
||
connect(pActionEdit, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
|
||
connect(pActionRect2, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent()));
|
||
|
||
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;
|
||
case 7:
|
||
SetEdit();
|
||
break;
|
||
case 8:
|
||
SetCurDrawType("Rect");
|
||
break;
|
||
}
|
||
}
|
||
|
||
void CRealTimeForm::SetEdit()
|
||
{
|
||
m_EditMode = 1;
|
||
LoadGraphicsConfig(1);
|
||
}
|
||
void CRealTimeForm::on_addchannel(channelBaseInfo channelbaseInfo,QString str)
|
||
{
|
||
|
||
QPen pen; // 定义一个画笔,设置画笔颜色和宽度
|
||
pen.setColor(QColor(0, 0, 0,0));
|
||
pen.setWidth(1);
|
||
CMyCustomGraphicsItem* pItemGroup = new CMyCustomGraphicsItem();
|
||
|
||
QGraphicsRectItem* pRect = new QGraphicsRectItem(0, 0, 290, 30);
|
||
pRect->setBrush(QBrush(QColor(255, 255, 255)));
|
||
pRect->setPen(pen);
|
||
pRect->setPos(0, 0);
|
||
pRect->setData(1,"Rect");
|
||
pItemGroup->addToGroup(pRect);
|
||
pItemGroup->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
||
|
||
|
||
QGraphicsTextItem* pTextUnits = NULL;
|
||
if(channelbaseInfo.channelType == "TACHOMETER"){
|
||
if(str == "偏置电压" || str == "最大正向峰值" || str == "最大负向峰值" || str == "平均值"){
|
||
pTextUnits = new QGraphicsTextItem("V");
|
||
}else{
|
||
pTextUnits = new QGraphicsTextItem("RPM");
|
||
}
|
||
}else if(channelbaseInfo.channelType == "ACCELEROMETER"){
|
||
if(str == "偏置电压"){
|
||
pTextUnits = new QGraphicsTextItem("V");
|
||
}
|
||
else if(str == "最大正向峰值" || str == "最大负向峰值" ||
|
||
str == "诊断峰峰值" || str == "平均值"){
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}else if(str == "速度峰值" || str == "速度有效值"){
|
||
pTextUnits = new QGraphicsTextItem("mm/s");
|
||
}else{
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}
|
||
}else if(channelbaseInfo.channelType == "PROXIMETER"){
|
||
if(str == "平均值"){
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}
|
||
else if(str == "最大正向峰值" || str == "最大负向峰值" ||
|
||
str == "诊断峰峰值"){
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}else{
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}
|
||
}else if(channelbaseInfo.channelType == "THRUST"){
|
||
if(str == "平均值"){
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}else if(str == "偏置电压"){
|
||
pTextUnits = new QGraphicsTextItem("V");
|
||
}else{
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}
|
||
}else if(channelbaseInfo.channelType == "VELOCITY"){
|
||
if(str == "偏置电压"){
|
||
pTextUnits = new QGraphicsTextItem("V");
|
||
}else if(str == "有效值"){
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}else if(str == "位移峰值" || str == "位移有效值"){
|
||
pTextUnits = new QGraphicsTextItem("um");
|
||
}else{
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}
|
||
}else if(channelbaseInfo.channelType == "SLOW_CURRENT"){
|
||
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
|
||
}else if(channelbaseInfo.channelType == "FAST_VOLTAGE"){
|
||
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}else if(channelbaseInfo.channelType == "PULSE_CURRENT"){
|
||
|
||
pTextUnits = new QGraphicsTextItem(channelbaseInfo.sensorEngineeringUnit);
|
||
}
|
||
|
||
if(str == "峰值因子"){
|
||
pTextUnits = new QGraphicsTextItem("");
|
||
}
|
||
|
||
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;
|
||
font.setPixelSize(16);
|
||
QFont font2 ( "黑体", 18, 50);
|
||
font.setFamily(QStringLiteral("黑体"));
|
||
pTextUnits->setFont(font);
|
||
pTextUnits->setDefaultTextColor(QColor(27, 30, 35));
|
||
pTextChannel->setFont(font);
|
||
pTextValue->setFont(font2);
|
||
pTextValue->setPos(150,0);
|
||
pTextValue->setDefaultTextColor(QColor(31, 81, 136));
|
||
pTextChannel->setPos(0,2);
|
||
pTextChannel->setDefaultTextColor(QColor(27, 30, 35));
|
||
pTextUnits->setPos(240,5);
|
||
|
||
|
||
// 设置可移动、可选择
|
||
|
||
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)
|
||
{
|
||
if(!m_EditMode){
|
||
QMessageBox::information(this, QStringLiteral("提示"), "请先进入编辑模式!");
|
||
return;
|
||
}
|
||
if(strType == "vertical"){
|
||
QGraphicsLineItem* pLine = new QGraphicsLineItem(0, 0, 100, 100);
|
||
pLine->setPos(0, 0);
|
||
pLine->setRotation(45);
|
||
pLine->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
||
pLine->setZValue(100);
|
||
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);
|
||
pLine->setPos(0, 0);
|
||
pLine->setRotation(-45);
|
||
pLine->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
||
pLine->setZValue(100);
|
||
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"){
|
||
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);
|
||
|
||
}
|
||
|
||
}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();
|
||
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);
|
||
}
|
||
|
||
ui->graphicsView->update();
|
||
|
||
}
|
||
|
||
void CRealTimeForm::SaveGraphicsConfig()
|
||
{
|
||
m_EditMode = 0;
|
||
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();
|
||
//qDebug() << "itemType" << itemType << endl;
|
||
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();
|
||
//qDebug() << "Line" << pos << rect;
|
||
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
|
||
{
|
||
|
||
QPointF pos = graphicsItem->pos();
|
||
QRectF rect = graphicsItem->boundingRect();
|
||
//qDebug() << "Pixmap" << pos << rect;
|
||
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();
|
||
//qDebug() << "pGraphicGroupItem data" << strChannelID << endl;
|
||
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();
|
||
//qDebug() << "item va data" << itemData << itemData2 << i << endl;
|
||
break;
|
||
}else if (itemData == "channel") {
|
||
//qDebug() << "item ch data" << itemData << i << endl;
|
||
break;
|
||
}else if(itemData == "units"){
|
||
//qDebug() << "item un data" << itemData << i << endl;
|
||
break;
|
||
}
|
||
}
|
||
|
||
QGraphicsItem* graphicsItem = static_cast<QGraphicsItem *>(item);
|
||
int itemType = graphicsItem->type();
|
||
//qDebug() << "itemData2" << itemData << endl;
|
||
|
||
switch (itemType) {
|
||
case 3: {//Rect
|
||
QPointF pos = graphicsItem->pos();
|
||
QRectF rect = graphicsItem->boundingRect();
|
||
//qDebug() << "group 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());
|
||
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;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
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;
|
||
}
|
||
|
||
void CRealTimeForm::LoadGraphicsConfig(int type)
|
||
{
|
||
//读取图元的数据
|
||
|
||
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++) {
|
||
QString strFileName = QString("Graph%1.json").arg(ii+1);
|
||
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\" + strFileName;
|
||
qDebug() << "打开" << fileName ;
|
||
if(!fileName.isEmpty())
|
||
{
|
||
QFile file(fileName);
|
||
file.open(QIODevice::ReadOnly | QIODevice::Text);
|
||
QString value = file.readAll();
|
||
file.close();
|
||
|
||
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);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
// 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);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
// 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;
|
||
}
|
||
|
||
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);
|
||
if(ii == 0){
|
||
m_pGraphicsScene->addItem(pText);
|
||
}else if(ii == 1){
|
||
m_pGraphicsScene_2->addItem(pText);
|
||
}
|
||
}
|
||
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,
|
||
290, 30);
|
||
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;
|
||
QFont font2 ( "黑体", 18, 50);
|
||
font.setPixelSize(16);
|
||
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);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
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)
|
||
{
|
||
QString RPM = "0";
|
||
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 == "转速"){
|
||
str = QString("%1").arg(QString::number(m_vecCharateristic[i].speedRPM, 'f', m_vecCharateristic[i].ChUnitDot));
|
||
RPM = str;
|
||
}else if(itemData2 == "最大正向峰值"){
|
||
str = QString("%1").arg(QString::number(m_vecCharateristic[i].MaxValues, 'f', m_vecCharateristic[i].ChUnitDot));
|
||
}else if(itemData2 == "最大负向峰值"){
|
||
str = QString("%1").arg(QString::number(m_vecCharateristic[i].MinValues, 'f', m_vecCharateristic[i].ChUnitDot));
|
||
}else if(itemData2 == "监测保护峰峰值"){
|
||
str = QString("%1").arg(QString::number(m_vecCharateristic[i].MonitorPk2Pk, 'f', m_vecCharateristic[i].ChUnitDot));
|
||
}else if(itemData2 == "诊断峰峰值"){
|
||
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));
|
||
}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].DerivedPeak, 'f', m_vecCharateristic[i].ChUnitDot));
|
||
}else if(itemData2 == "偏置电压"){
|
||
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));
|
||
}else{
|
||
str = QString("%1").arg(QString::number(m_vecCharateristic[i].DCValues, 'f', m_vecCharateristic[i].ChUnitDot));
|
||
}
|
||
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));
|
||
|
||
}
|
||
}
|
||
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++) {
|
||
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);
|
||
}
|
||
}
|
||
UpdateCharacteristic(m_vecCharateristic);
|
||
}
|
||
|
||
// 接受服务返回的数据
|
||
void CRealTimeForm::slotRecieve()
|
||
{
|
||
QByteArray arrayReady = m_pSocket->readAll();
|
||
m_arrayReady += arrayReady;
|
||
// 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);
|
||
// }
|
||
// }
|
||
}
|
||
|
||
void CRealTimeForm::disConnect()
|
||
{
|
||
QJsonDocument doc = QJsonDocument::fromJson(m_arrayReady);
|
||
QJsonObject objec = doc.object();
|
||
if(m_RealtimeLog == 1)
|
||
customLogMessageHandler(QtDebugMsg,QString(QJsonDocument(objec).toJson()));
|
||
if(objec.contains("cmd"))
|
||
{
|
||
QJsonValue arrays_value = objec.take("cmd");
|
||
//qDebug()<<"cmd ="<<arrays_value.toString();
|
||
if(arrays_value.toString() == "09"){
|
||
//qDebug()<<"cmd ="<<arrays_value.toString();
|
||
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 strinvalid_ch = objec["invalid_ch_num"].toString();
|
||
QString str = strTrgStatus + "," + strWCStatus + "," + strinvalid_ch;
|
||
sigWCStatus(str);
|
||
sigDOStatus(arrayValueDIs,arrayValueDOs);
|
||
if(strWCStatus.contains("停机")){
|
||
if(m_MachineStatus == 1){
|
||
LoadGraphicsConfig(2);
|
||
}
|
||
m_MachineStatus = 0;
|
||
}else {
|
||
if(m_MachineStatus == 0){
|
||
LoadGraphicsConfig(0);
|
||
}
|
||
m_MachineStatus = 1;
|
||
}
|
||
}
|
||
}
|
||
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";
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|