JOriginalMainWnd.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. // *****************************************************************************
  2. // 版权所有(C)2023~2099 上海骄成超声波技术有限公司
  3. // 保留所有权利
  4. // *****************************************************************************
  5. // 作者 : 杨坚
  6. // 版本 : 1.0
  7. // 功能说明:
  8. // 当前类为了执行通用函数
  9. // *****************************************************************************
  10. #ifndef __JORIGINALMAINWND_H__
  11. #define __JORIGINALMAINWND_H__ 1
  12. #include <QMainWindow>
  13. #include <TypeDef.h>
  14. #include <QScrollArea>
  15. #include "CameraMaterialGroupWnd/CameraImage/CameraImageHandler.h"
  16. #include "Src/CameraBind.h"
  17. // 定义函数指针类型
  18. // 函数指针类型
  19. using FunSignaPo = std::function<void(int, JVision::ImageInfo)>;
  20. using FunSignaPoA = void (*)(int, JVision::ImageInfo);
  21. using FunSlotPo = std::function<void()>;
  22. using FunSlotPoA = void (*)();
  23. // 模板函数传递
  24. struct STR_TEMPLATE
  25. {
  26. QScrollArea* pView;
  27. std::vector<FunSlotPo> veSlotFun; // 曹函数
  28. std::vector<FunSignaPo> veSignalFun; // 信号
  29. };
  30. // 当前选择的Group
  31. struct ST_CURRENT_SELECT_GROUP
  32. {
  33. /**当前选中的
  34. */
  35. Group* pSelectGroup;
  36. /**当前相机ID
  37. */
  38. int nCurrentCameraId;
  39. int nGroupId;
  40. /**当前选中左边,右边大窗口
  41. */
  42. int nSelectLeft1;
  43. bool isBond;
  44. /**绑定次数
  45. */
  46. int nBindNumber;
  47. bool isInitialed;
  48. };
  49. class JOriginalMainWnd: public QMainWindow
  50. {
  51. Q_OBJECT
  52. public:
  53. explicit JOriginalMainWnd(QWidget* parent = nullptr);
  54. ~JOriginalMainWnd();
  55. public: //--- 这里任何逻辑都不要动,先等完善在精简
  56. /**必须绑定它, 没必要一直new ,只是控制
  57. */
  58. virtual void InitMainCameraBind(CameraBind* pCameraBind) = 0;
  59. /**窗口切换或者销毁必须解绑
  60. */
  61. virtual void UnCameraBind() = 0;
  62. /**绑定相机画面
  63. */
  64. virtual void CameraConnectUpdateImageFun(int nIndex, Group* widget, bool isUnCameraBind = false) = 0;
  65. virtual void UpdateCameraDisplay0(int iCameraId, JVision::ImageInfo imageData) = 0;
  66. virtual void UpdateCameraDisplay1(int iCameraId, JVision::ImageInfo imageData) = 0;
  67. virtual void UpdateCameraDisplay2(int iCameraId, JVision::ImageInfo imageData) = 0;
  68. virtual void UpdateCameraDisplay3(int iCameraId, JVision::ImageInfo imageData) = 0;
  69. virtual void UpdateCameraDisplay4(int iCameraId, JVision::ImageInfo imageData) = 0;
  70. /**做绑定释放
  71. */
  72. // virtual void DelBind() = 0;
  73. public: // 通用模板函数
  74. template<class Y>
  75. void CameraConnectUpdateImageFunA(Y calssFun,int nIndex, Group* widget, bool isUnCameraBind = false);
  76. template<class Y>
  77. void InitAllCamerPage(STR_TEMPLATE strFun,Y Fun);
  78. // 创建通用模板
  79. /* template <typename Y, typename T>
  80. using CameraImageHandlera = void (Y::*)(const T&);*/
  81. template <typename Y, typename T>
  82. void SwitchToConfigAAAAA(void (Y::* switchMethod)(const T&));
  83. public:
  84. std::vector<std::unique_ptr<CameraImageHandler>> m_manager;
  85. /**用于管理所有的控制,
  86. */
  87. CameraBind* m_pMainCameraBind = nullptr;
  88. };
  89. template<class Y>
  90. void JOriginalMainWnd::CameraConnectUpdateImageFunA(Y calssFun, int nIndex, Group* widget, bool isUnCameraBind /*= false*/)
  91. {
  92. auto BinCamerasImage = [&](void (calssFun::* pCamerasImage)(const QPixmap& imageData))
  93. {
  94. if (isUnCameraBind)
  95. {
  96. //disconnect(widget, &Group::SetCurrentSelectSig, this, &ChartsAndCamerasWnd::GetCurrentSelectSlots);
  97. disconnect(this, pCamerasImage, widget, &Group::UpDataImageShowSlots);
  98. }
  99. else
  100. {
  101. //共用函数
  102. connect(widget, &Group::sendUpdateGroupState, this, &SingleCameraOperationWnd::checkSettings);
  103. connect(this, pCamerasImage, widget, &Group::UpDataImageShowSlots);
  104. }
  105. };
  106. if (nIndex == 0)
  107. {
  108. BinCamerasImage(&calssFun::UpDataImageShowSignals0);
  109. }
  110. else if (nIndex == 1)
  111. {
  112. BinCamerasImage(&calssFun::UpDataImageShowSignals1);
  113. }
  114. else if (nIndex == 2)
  115. {
  116. BinCamerasImage(&calssFun::UpDataImageShowSignals2);
  117. }
  118. else if (nIndex == 3)
  119. {
  120. BinCamerasImage(&calssFun::UpDataImageShowSignals3);
  121. }
  122. else if (nIndex == 4)
  123. {
  124. BinCamerasImage(&calssFun::UpDataImageShowSignals4);
  125. }
  126. }
  127. template <typename Y, typename T>
  128. void JOriginalMainWnd::SwitchToConfigAAAAA(void (Y::* switchMethod)(const T&))
  129. {
  130. int A = 10;
  131. }
  132. #endif //__JORIGINALMAINWND_H__