JOriginalMainWnd.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. };
  48. class JOriginalMainWnd: public QMainWindow
  49. {
  50. Q_OBJECT
  51. public:
  52. explicit JOriginalMainWnd(QWidget* parent = nullptr);
  53. ~JOriginalMainWnd();
  54. public: //--- 这里任何逻辑都不要动,先等完善在精简
  55. /**必须绑定它, 没必要一直new ,只是控制
  56. */
  57. virtual void InitMainCameraBind(CameraBind* pCameraBind) = 0;
  58. /**窗口切换或者销毁必须解绑
  59. */
  60. virtual void UnCameraBind() = 0;
  61. /**绑定相机画面
  62. */
  63. virtual void CameraConnectUpdateImageFun(int nIndex, Group* widget, bool isUnCameraBind = false) = 0;
  64. virtual void UpdateCameraDisplay0(int iCameraId, JVision::ImageInfo imageData) = 0;
  65. virtual void UpdateCameraDisplay1(int iCameraId, JVision::ImageInfo imageData) = 0;
  66. virtual void UpdateCameraDisplay2(int iCameraId, JVision::ImageInfo imageData) = 0;
  67. virtual void UpdateCameraDisplay3(int iCameraId, JVision::ImageInfo imageData) = 0;
  68. virtual void UpdateCameraDisplay4(int iCameraId, JVision::ImageInfo imageData) = 0;
  69. /**做绑定释放
  70. */
  71. // virtual void DelBind() = 0;
  72. public: // 通用模板函数
  73. template<class Y>
  74. void CameraConnectUpdateImageFunA(Y calssFun,int nIndex, Group* widget, bool isUnCameraBind = false);
  75. template<class Y>
  76. void InitAllCamerPage(STR_TEMPLATE strFun,Y Fun);
  77. // 创建通用模板
  78. /* template <typename Y, typename T>
  79. using CameraImageHandlera = void (Y::*)(const T&);*/
  80. template <typename Y, typename T>
  81. void SwitchToConfigAAAAA(void (Y::* switchMethod)(const T&));
  82. public:
  83. std::vector<std::unique_ptr<CameraImageHandler>> m_manager;
  84. /**用于管理所有的控制,
  85. */
  86. CameraBind* m_pMainCameraBind = nullptr;
  87. };
  88. template<class Y>
  89. void JOriginalMainWnd::CameraConnectUpdateImageFunA(Y calssFun, int nIndex, Group* widget, bool isUnCameraBind /*= false*/)
  90. {
  91. auto BinCamerasImage = [&](void (calssFun::* pCamerasImage)(const QPixmap& imageData))
  92. {
  93. if (isUnCameraBind)
  94. {
  95. //disconnect(widget, &Group::SetCurrentSelectSig, this, &ChartsAndCamerasWnd::GetCurrentSelectSlots);
  96. disconnect(this, pCamerasImage, widget, &Group::UpDataImageShowSlots);
  97. }
  98. else
  99. {
  100. //共用函数
  101. connect(widget, &Group::sendUpdateGroupState, this, &SingleCameraOperationWnd::checkSettings);
  102. connect(this, pCamerasImage, widget, &Group::UpDataImageShowSlots);
  103. }
  104. };
  105. if (nIndex == 0)
  106. {
  107. BinCamerasImage(&calssFun::UpDataImageShowSignals0);
  108. }
  109. else if (nIndex == 1)
  110. {
  111. BinCamerasImage(&calssFun::UpDataImageShowSignals1);
  112. }
  113. else if (nIndex == 2)
  114. {
  115. BinCamerasImage(&calssFun::UpDataImageShowSignals2);
  116. }
  117. else if (nIndex == 3)
  118. {
  119. BinCamerasImage(&calssFun::UpDataImageShowSignals3);
  120. }
  121. else if (nIndex == 4)
  122. {
  123. BinCamerasImage(&calssFun::UpDataImageShowSignals4);
  124. }
  125. }
  126. template <typename Y, typename T>
  127. void JOriginalMainWnd::SwitchToConfigAAAAA(void (Y::* switchMethod)(const T&))
  128. {
  129. int A = 10;
  130. }
  131. #endif //__JORIGINALMAINWND_H__