#pragma once #include "../ShowUnit/HWndUnit.h" #include "Common.h" #include "VControlObject.h" // 扩展属性相关数量 #define IMAGE_PROPERTY_EX_MAINLINK_COUNT 1 //#define IMAGE_PROPERTY_EX_SUBGROUPLINK_COUNT 2 //#define IMAGE_PROPERTY_EX_SUBGROUPLINK2_COUNT 2 //#define IMAGE_PROPERTY_EX_GROUP_COUNT 2 // 扩展属性的组名 #define IMAGE_PROPERTY_EX_NAME "图像" #define IMAGE_PROPERTY_EX_MAINLINK_NAME "图像链接" #define IMAGE_PROPERTY_EX_REFRESHLINK_NAME "显示刷新链接" // 组1 #define IMAGE_PROPERTY_EX_GROUP_NAME "图层" #define IMAGE_PROPERTY_EX_SUBGROUP_NAME "图层数据" #define IMAGE_PROPERTY_EX_LINK1_NAME "图层链接" #define IMAGE_PROPERTY_EX_LINK2_NAME "图层状态链接" // 杂项 #define IMAGE_PROPERTY_EX_HOBJECT_COLOR_NAME "图层颜色" // #define IMAGE_PROPERTY_EX_HOBJECT_TRANSP_NAME "图层透明度" #define IMAGE_PROPERTY_EX_LINEWIDTH_NAME "图层线宽" // 组2 #define IMAGE_PROPERTY_EX_GROUP2_NAME "文本" #define IMAGE_PROPERTY_EX_SUBGROUP2_NAME "文本数据" #define IMAGE_PROPERTY_EX_LINK3_NAME "文本链接" #define IMAGE_PROPERTY_EX_LINK4_NAME "文本状态链接" // 杂项 #define IMAGE_PROPERTY_EX_HTUPLE_COLOR_NAME "文本颜色" #define IMAGE_PROPERTY_EX_HTUPLE_PT_NAME "文本坐标" #define IMAGE_PROPERTY_EX_HTUPLE_SIZE_NAME "文本尺寸" // 组3 (无状态) #define IMAGE_PROPERTY_EX_GROUP3_NAME "显示" #define IMAGE_PROPERTY_EX_SUBGROUP3_NAME "显示数据" #define IMAGE_PROPERTY_EX_LINK5_NAME "显示链接" // 杂项 #define IMAGE_PROPERTY_EX_DISPLAY_COLOR_NAME "显示颜色" // 组4 (无状态) #define IMAGE_PROPERTY_EX_GROUP4_NAME "字符" #define IMAGE_PROPERTY_EX_SUBGROUP4_NAME "字符数据" #define IMAGE_PROPERTY_EX_LINK6_NAME "字符链接" // 杂项 #define IMAGE_PROPERTY_EX_STRING_COLOR_NAME "字符颜色" #define IMAGE_PROPERTY_EX_STRING_PT_NAME "字符坐标" #define IMAGE_PROPERTY_EX_STRING_SIZE_NAME "字符尺寸" // 组5 (无状态,无杂项) #define IMAGE_PROPERTY_EX_GROUP5_NAME "存储" #define IMAGE_PROPERTY_EX_SUBGROUP5_NAME "存储相关" #define IMAGE_PROPERTY_EX_LINK7_NAME "名称链接" #define IMAGE_PROPERTY_EX_LINK8_NAME "路径链接" #define IMAGE_PROPERTY_EX_LINK9_NAME "状态链接" // 杂项 #define IMAGE_PROPERTY_EX_SACVE_IMG_NAME "启用保存原图" #define IMAGE_PROPERTY_EX_SAVE_DUMP_NAME "启用保存截图" #define IMAGE_PROPERTY_EX_EXE_STATE_NAME "启用状态判断" #define IMAGE_PROPERTY_EX_SAVE_MODE_NAME "存储模式" #define IMAGE_PROPERTY_EX_BUFFER_SIZE_NAME "缓存大小" #define IMAGE_PROPERTY_EX_FREE_TIME_NAME "空闲时间" // Obj数量的属性名称 #define IMAGE_OBJ_COUNT_NAME "objCount" // Tuple数量的属性名称 #define IMAGE_MSG_COUNT_NAME "tupleCount" // Disp数量的属性名称 #define IMAGE_DISPLAY_COUNT_NAME "displayCount" // String数量的属性名称 #define IMAGE_STRING_COUNT_NAME "stringCount" // HObject属性子分组编号 #define GROUP_INDEX_HOBJECT 0 // HTuple属性子分组的编号 #define GROUP_INDEX_HTUPLE 1 // Display属性子分组的编号 #define GROUP_INDEX_DISPLAY 2 // String属性子分组的编号 #define GROUP_INDEX_STRING 3 // Save属性子分组的编号 #define GROUP_INDEX_SAVE 4 // 默认数值 //j #define DEFAULT_TRANSPARENCY 0.0 #define IMAGE_DEFAULT_LINEWIDTH 1 #define IMAGE_DEFAULT_X 10 #define IMAGE_DEFAULT_Y 10 #define IMAGE_DEFAULT_SIZE 5 class VImageControl : public HWndUnit, public VControlObject { Q_OBJECT; //// 设置控件属性表 //Q_PROPERTY(bool enable READ getEnable WRITE setEnable); Q_PROPERTY(QString title READ getText WRITE setText) Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry) // 图层属性 Q_PROPERTY(int objCount READ getHObjectCount WRITE setHObjectCount); // 文本属性 Q_PROPERTY(int tupleCount READ getHTupleCount WRITE setHTupleCount); // 显示属性 Q_PROPERTY(int displayCount READ getDisplayCount WRITE setDisplayCount); // String属性 Q_PROPERTY(int stringCount READ getStringCount WRITE setStringCount); public: VImageControl( QWidget* parent, const QPoint& pos, const QSize& size, CONTROL_PROPERTY* pProperty = nullptr, CONTROL_PROPERTY_EX* pPropertyEx = nullptr, bool bStartSaveThread = false ); ~VImageControl(); // 属性的实现函数 //void setEnable(const bool enable); void setText(const QString& title); // 设置HObject数量 void setHObjectCount(const int& count); // 获取HObject数量 int getHObjectCount(); // 设置HTuple数量 void setHTupleCount(const int& count); // 获取HTuple数量 int getHTupleCount(); // 设置Display数量 void setDisplayCount(const int& count); // 获取Display数量 int getDisplayCount(); // 设置String数量 void setStringCount(const int& count); // 获取Display数量 int getStringCount(); // 重绘图像(图像+图层+文本) void redraw(); // 调整块属性数量(虚函数) virtual void updateExPropertyCount(const int fixCount, const QString& strPropName); // 修改扩展属性(虚函数) virtual void changeExProperties(QString strValueTitle, const QVariant& newValue); // 更新图像数据 void updateImageFromVariables(const RUNTIME_SYNC_VARS& vars); // 更新图层线宽 void updateLineWidth(const int lineWidth, const int index); // 更新图层颜色 void updateHObjectColor(const QColor newColor, const int index); // 更新文本颜色 void updateHTupleColor(const QColor newColor, const int index); // 更新图层颜色 void updateDisplayColor(const QColor newColor, const int index); // 更新字符颜色 void updateStringColor(const QColor newColor, const int index); // 更新文本坐标 void updateHTuplePt(const QPoint newPt, const int index); // 更新文本尺寸 void updateHTupleSize(const int newSize, const int index); // 更新字符坐标 void updateStringPt(const QPoint newPt, const int index); // 更新字符尺寸 void updateStringSize(const int newSize, const int index); // 更新是否存图 void updateSaveImage(const bool bEnable); // 更新是否转储窗口 void updateDumpWindow(const bool bEnable); // 更新是否使用状态判断 void updateExeState(const bool bEnable); // 更新存储模式 void updateSaveMode(const int nMode); // 更新缓冲区大小 void updateBufferSize(const int nMode); // 更新空闲时间 void updateFreeTime(const int nMode); // 启动 存储线程 void startSaveThread(); protected: void paintEvent(QPaintEvent*); private: // 初始化扩展属性 void initPropertyEx(); // 初始化子属性组 void initSubGroup(PROPERTY_EX_SUBGROUP& subGroup, int nIndex, int nSubGroupID); // 初始化一个扩展属性组 void initSubGroupHObject(PROPERTY_EX_SUBGROUP& subGroup, int nIndex); // 初始化一个扩展属性组2 void initSubGroupHTuple(PROPERTY_EX_SUBGROUP& subGroup, int nIndex); // 初始化一个扩展属性组3 void initSubGroupDisplay(PROPERTY_EX_SUBGROUP& subGroup, int nIndex); // 初始化一个扩展属性组4 void initSubGroupString(PROPERTY_EX_SUBGROUP& subGroup, int nIndex); // 初始化一个扩展属性组5 void initSubGroupSave(PROPERTY_EX_SUBGROUP& subGroup, int nIndex); // 设置图像(单个) void ShowImage(HImage image); // 设置HObject(可多个) void ShowObj( HObject obj, QColor color = qRgb(255, 0, 0), int nLineWidth = IMAGE_DEFAULT_LINEWIDTH ); // 设置文本(可多个) void ShowMsg( HTuple msg, QColor color = qRgb(0, 255, 0), QPoint pt = QPoint(IMAGE_DEFAULT_X, IMAGE_DEFAULT_Y), int nSize = IMAGE_DEFAULT_SIZE ); // 刷新图像 void Refresh(); // 生成一个随机的HObject供预览使用 HObject genRandomHObject(); // 生成一个随机的Tuple供预览使用 HTuple genRandomHTuple(); private: // 用于绘制的图形单元 HImage m_Image; // HObject QVector m_HObjects; // int QVector m_HObjectsStatus; // HTuple QVector m_HTuples; // int QVector m_HTuplesStatus; // 默认颜色集合 QVector m_defaultColors; // Display QVector m_Dsiplays; // String QVector m_String; // //用来在显示控件内部存图的路径 QString m_strFileName; QString m_strFilePath; //根据此执行状态,确定写入的图片存到 ok 还是 ng文件夹 int m_nExecuteState; private: QThreadPool m_SaveThreadPool; public: QVector m_SaveImages; int m_nThreadState; }; // Save的执行线程体 class _SaveThread : public QObject, public QRunnable { Q_OBJECT public: _SaveThread(VImageControl* pImageControl) { this->m_pImageControl = pImageControl; }; ~_SaveThread() {}; protected: // 线程函数 virtual void run(); private: VImageControl* m_pImageControl; };