3500/realtimeform.h

178 lines
5.3 KiB
C
Raw Normal View History

2023-04-14 19:30:30 +08:00
#ifndef REALTIMEFORM_H
#define REALTIMEFORM_H
#include <QWidget>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsItem>
#include <QGraphicsRectItem>
#include <QGraphicsLineItem>
#include <QGraphicsTextItem>
2023-04-27 19:48:15 +08:00
#include <QGraphicsProxyWidget>
2023-04-14 19:30:30 +08:00
#include <QKeyEvent>
#include <AddChannel.h>
#include "sqlitedb.h"
#include <QTimer> //定时器类
#include <QAbstractSocket>
#include <QTcpSocket>
class NetMgr;
namespace Ui {
class CRealTimeForm;
}
// 1 创建新的类 MyItem2 继承 QGraphicsPathItem重新实现点击、悬浮等函数
#include <QGraphicsSceneEvent>
#include <QPen>
// 点击该控件时,调用该函数
typedef void (*ClickHandle)(int type,void *other);
class MyItem2 : public QGraphicsPathItem
{
public:
explicit MyItem2(QGraphicsItem *parent = nullptr);
protected:
// 重新实现这些函数
void keyPressEvent(QKeyEvent *event);
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent (QGraphicsSceneHoverEvent * event);
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
public:
void setID(int ID);
void setClicKHandle(ClickHandle click,void * other);
QPainterPath path;
private:
int ID;
ClickHandle click;
void * other;
QPen pen;
};
2024-09-11 16:37:00 +08:00
class MyGraphicsView : public QGraphicsView
{
public:
MyGraphicsView(QGraphicsScene *scene, QWidget *parent = nullptr) : QGraphicsView(scene, parent) {}
2023-04-14 19:30:30 +08:00
2024-09-11 16:37:00 +08:00
protected:
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton) {
QPointF scenePos = mapToScene(event->pos());
// 查找点击位置的 QGraphicsItem
QGraphicsItem *item = scene()->itemAt(scenePos, transform());
if (item) {
// 检查该项目是否是一个 QGraphicsItemGroup
QGraphicsItemGroup *group = dynamic_cast<QGraphicsItemGroup*>(item);
if (group) {
qDebug() << "QGraphicsItemGroup clicked";
// 在组内项目上改变颜色,表示被选中
for (QGraphicsItem *child : group->childItems()) {
QGraphicsRectItem *rectItem = dynamic_cast<QGraphicsRectItem*>(child);
if (rectItem) {
rectItem->setBrush(Qt::blue); // 将颜色设置为蓝色
}
}
} else {
qDebug() << "Other QGraphicsItem clicked";
}
} else {
qDebug() << "No item clicked";
}
}
// 调用基类的鼠标按下事件处理器
QGraphicsView::mousePressEvent(event);
}
};
2023-04-14 19:30:30 +08:00
class CRealTimeForm : public QWidget //, public MyItem2
{
Q_OBJECT
public:
explicit CRealTimeForm(QWidget *parent = nullptr);
~CRealTimeForm();
private slots:
void on_graphView_customContextMenuRequested(const QPoint &pos);
void onTaskBoxContextMenuEvent();
void slotDoubleClick(QGraphicsSceneMouseEvent *event);
void on_addchannel(channelBaseInfo channelbaseInfo,QString str);
//网络请求数据响应
void slotNetMgr(QString sAddr,const QVariant& msg);
public slots:
// 接受服务器的数据槽函数
void slotRecieve();
void disConnect();
// 连接状态变化的时候触发
//void slotStateChanged(QAbstractSocket::SocketState state);
signals:
void sigWCStatus(QString&);
void sigDOStatus(QJsonArray&,QJsonArray&);
void sigRPM(QString&);
protected:
void keyPressEvent(QKeyEvent *event);
void mouseDoubleClickEvent(QMouseEvent* e);
2024-09-11 16:37:00 +08:00
2023-04-14 19:30:30 +08:00
private:
Ui::CRealTimeForm *ui;
QGraphicsScene* m_pGraphicsScene ;
QGraphicsScene* m_pGraphicsScene_2 ;
QAction *pActionVerticalLine ;
QAction *pActionHorizontalLine ;
QAction *pActionRect ;
QAction *pActionPixmap ;
QAction *pActionText ;
2023-10-19 14:15:31 +08:00
QAction *pActionRect2 ;
2023-04-27 19:48:15 +08:00
QAction *pActionEdit ;
2023-04-14 19:30:30 +08:00
QAction *pActionSave ;
QAction *pActionAlignmentX ;
QAction *pActionAlignmentY ;
2023-04-14 19:30:30 +08:00
int id1; //定时器1的唯一标示
2023-10-19 14:15:31 +08:00
int m_RealtimeLog;
int m_MachineStatus;//1 运行 0 停机
2023-04-14 19:30:30 +08:00
QByteArray m_arrayReady;
QMap<QString,QMap<int,QGraphicsItem*>> mapGrapics;
void InitChannelInfo();
void SetCurDrawType(QString strType);
2023-04-27 19:48:15 +08:00
void SetEdit();
void SetAlignmentX();
void SetAlignmentY();
2023-10-19 14:15:31 +08:00
void LoadGraphicsConfig(int type);//0 正常1 编辑 2 停机
2023-04-14 19:30:30 +08:00
void SaveGraphicsConfig();
void UpdateCharacteristic(QVector<_Charateristic>& m_vecCharateristic);
void ParseCharacteristic(QJsonArray& arrayValue);
QTcpSocket *m_pSocket; // 客户端Socket对象
QString m_strServerIp; // 服务端IP
QList<QString> m_strReciveList; // 接受回来的数据放到链表里面
bool m_bConnected; // 连接的标志
int m_nConnectWaitTimes; // 连接的等待时间
int m_nServerPort; // 服务端端口号
2023-04-27 19:48:15 +08:00
int m_EditMode;
2023-04-14 19:30:30 +08:00
NetMgr *m_pNetMgr; //HTTP消息类对象
QVector<_Charateristic> m_vecCharateristic;
2025-11-13 10:24:53 +08:00
QString m_RPM;
2023-04-14 19:30:30 +08:00
//重写定时器的事件 虚函数 子类重写父类的虚函数
virtual void timerEvent(QTimerEvent *);
};
#endif // REALTIMEFORM_H