// ***************************************************************************** // 版权所有(C)2023~2099 上海骄成超声波技术有限公司 // 保留所有权利 // ***************************************************************************** // 作者 : 杨坚 // 版本 : 1.0 // 功能说明: // 当前类为了执行通用函数 // ***************************************************************************** #ifndef __JORIGINALMAINWND_H__ #define __JORIGINALMAINWND_H__ 1 #include #include #include #include "CameraMaterialGroupWnd/CameraImage/CameraImageHandler.h" #include "Src/CameraBind.h" // 定义函数指针类型 // 函数指针类型 using FunSignaPo = std::function; using FunSignaPoA = void (*)(int, JVision::ImageInfo); using FunSlotPo = std::function; using FunSlotPoA = void (*)(); // 模板函数传递 struct STR_TEMPLATE { QScrollArea* pView; std::vector veSlotFun; // 曹函数 std::vector veSignalFun; // 信号 }; // 当前选择的Group struct ST_CURRENT_SELECT_GROUP { /**当前选中的 */ Group* pSelectGroup; /**当前相机ID */ int nCurrentCameraId; int nGroupId; /**当前选中左边,右边大窗口 */ int nSelectLeft1; bool isBond; /**绑定次数 */ int nBindNumber; bool isInitialed; }; class JOriginalMainWnd: public QMainWindow { Q_OBJECT public: explicit JOriginalMainWnd(QWidget* parent = nullptr); ~JOriginalMainWnd(); public: //--- 这里任何逻辑都不要动,先等完善在精简 /**必须绑定它, 没必要一直new ,只是控制 */ virtual void InitMainCameraBind(CameraBind* pCameraBind) = 0; /**窗口切换或者销毁必须解绑 */ virtual void UnCameraBind() = 0; /**绑定相机画面 */ virtual void CameraConnectUpdateImageFun(int nIndex, Group* widget, bool isUnCameraBind = false) = 0; virtual void UpdateCameraDisplay0(int iCameraId, JVision::ImageInfo imageData) = 0; virtual void UpdateCameraDisplay1(int iCameraId, JVision::ImageInfo imageData) = 0; virtual void UpdateCameraDisplay2(int iCameraId, JVision::ImageInfo imageData) = 0; virtual void UpdateCameraDisplay3(int iCameraId, JVision::ImageInfo imageData) = 0; virtual void UpdateCameraDisplay4(int iCameraId, JVision::ImageInfo imageData) = 0; /**做绑定释放 */ // virtual void DelBind() = 0; public: // 通用模板函数 template void CameraConnectUpdateImageFunA(Y calssFun,int nIndex, Group* widget, bool isUnCameraBind = false); template void InitAllCamerPage(STR_TEMPLATE strFun,Y Fun); // 创建通用模板 /* template using CameraImageHandlera = void (Y::*)(const T&);*/ template void SwitchToConfigAAAAA(void (Y::* switchMethod)(const T&)); public: std::vector> m_manager; /**用于管理所有的控制, */ CameraBind* m_pMainCameraBind = nullptr; }; template void JOriginalMainWnd::CameraConnectUpdateImageFunA(Y calssFun, int nIndex, Group* widget, bool isUnCameraBind /*= false*/) { auto BinCamerasImage = [&](void (calssFun::* pCamerasImage)(const QPixmap& imageData)) { if (isUnCameraBind) { //disconnect(widget, &Group::SetCurrentSelectSig, this, &ChartsAndCamerasWnd::GetCurrentSelectSlots); disconnect(this, pCamerasImage, widget, &Group::UpDataImageShowSlots); } else { //共用函数 connect(widget, &Group::sendUpdateGroupState, this, &SingleCameraOperationWnd::checkSettings); connect(this, pCamerasImage, widget, &Group::UpDataImageShowSlots); } }; if (nIndex == 0) { BinCamerasImage(&calssFun::UpDataImageShowSignals0); } else if (nIndex == 1) { BinCamerasImage(&calssFun::UpDataImageShowSignals1); } else if (nIndex == 2) { BinCamerasImage(&calssFun::UpDataImageShowSignals2); } else if (nIndex == 3) { BinCamerasImage(&calssFun::UpDataImageShowSignals3); } else if (nIndex == 4) { BinCamerasImage(&calssFun::UpDataImageShowSignals4); } } template void JOriginalMainWnd::SwitchToConfigAAAAA(void (Y::* switchMethod)(const T&)) { int A = 10; } #endif //__JORIGINALMAINWND_H__