ToolDialog.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #include "ToolDialog.h"
  2. #include <QImage>
  3. #include <QFileInfo>
  4. #include <QFileDialog>
  5. #include <QElapsedTimer>
  6. #include <QGridLayout>
  7. ToolDialogImpl::ToolDialogImpl(QWidget *parent)
  8. : DllToolDialog(parent)
  9. {
  10. ui.setupUi(this);
  11. this->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint /*| Qt::WindowStaysOnTopHint*/);
  12. // 显示控件初始化
  13. hwndUnit = new HWndUnit(this);
  14. Util::ShowUnitInWidget(ui.Image_widget, hwndUnit);
  15. connect(this, SIGNAL(sigUpdateUI()), this, SLOT(on_UpdateUI()));
  16. connect(this, SIGNAL(sigUpdateImage()), this, SLOT(OnUpdateImage()));
  17. m_pCamera = nullptr;
  18. m_bIsBindCallback = false;
  19. m_nFrameNum = 0;
  20. }
  21. ToolDialogImpl::~ToolDialogImpl()
  22. {
  23. }
  24. VPEnum::RETURN_VALUE ToolDialogImpl::Execute()
  25. {
  26. // 以线程方式启动软触发
  27. QFuture<void> Future = QtConcurrent::run(this, &ToolDialogImpl::on_UpdateUI);
  28. // 阻塞等待线程执行
  29. Future.waitForFinished();
  30. // on_UpdateUI();
  31. return VPEnum::RETURN_VALUE::Success;
  32. }
  33. void ToolDialogImpl::Running(bool bRun)
  34. {
  35. }
  36. bool ToolDialogImpl::Serialized(QDataStream& ar, bool bIsOut)
  37. {
  38. int m_Value = 0;
  39. int paranum;//参数数量
  40. if (bIsOut)//保存参数流程
  41. {
  42. paranum = 1;
  43. ar << paranum;//先保存参数数量
  44. ar << (int)1 << m_Value;
  45. }
  46. else//加载参数流程,参数加载顺序一定要跟保存顺序一致
  47. {
  48. int nSize1 = 0;
  49. int para;
  50. ar >> paranum;//读取参数数量
  51. for (int i = 0; i < paranum; i++)
  52. {
  53. ar >> para;
  54. switch (para)
  55. {
  56. case 1: ar >> m_Value; break;
  57. default:
  58. {
  59. qWarning() << "Serialized(In) Error" ;
  60. return false;
  61. }
  62. break;
  63. }
  64. }
  65. //hwndUnit->getHWndCtrl()->useROIController(&roiController);
  66. }
  67. return true;
  68. }
  69. void ToolDialogImpl::on_UpdateUI()
  70. {
  71. if (m_pCamera != nullptr)
  72. {
  73. if (!m_bIsBindCallback)
  74. {
  75. int nCallBackSize = m_pCamera->getReceCallBackSIze();
  76. m_strUserID = QString("user%1").arg(nCallBackSize);
  77. m_pCamera->setReceCallBack(CameraCallback, (long long)this, m_strUserID);
  78. m_bIsBindCallback = true;
  79. }
  80. m_pCamera->softTriggerCap(m_strUserID);
  81. mutex.lock();
  82. activator.wait(&mutex, 1000);
  83. mutex.unlock();
  84. }
  85. }
  86. void ToolDialogImpl::OnUpdateImage()
  87. {
  88. QCoreApplication::sendEvent(this->m_pEventTarget, &this->m_PickEvent);
  89. }
  90. /// <summary>
  91. /// 确定
  92. /// </summary>
  93. void ToolDialogImpl::on_btnOK_clicked()
  94. {
  95. this->hide();
  96. }
  97. /// <summary>
  98. /// 取消按钮
  99. /// </summary>
  100. void ToolDialogImpl::on_btnCancel_clicked()
  101. {
  102. // 将本工具的恢复到打开工具之前的状态
  103. RecoverData();
  104. }
  105. /// <summary>
  106. /// 测试按钮
  107. /// </summary>
  108. void ToolDialogImpl::on_btnExecute_clicked()
  109. {
  110. QElapsedTimer toolTimer;
  111. toolTimer.start();
  112. // 发送事件
  113. ToolEvent* pToolEvent = new ToolEvent(m_strPouName, m_strInstanceName, TOOL_EVENT_TYPE::TOOL_TRIGGER);
  114. QCoreApplication::sendEvent(m_pEventTarget, pToolEvent);
  115. // 统计返回值
  116. VPEnum::RETURN_VALUE ret = pToolEvent->ret;
  117. double nExecTime = toolTimer.elapsed();
  118. QString str;
  119. str = QString("耗时: %1 ms").arg(nExecTime, 0, 'G', 5);
  120. ui.label_time->setText(str);
  121. str = QString("状态: %1 ").arg(QMetaEnum::fromType<VPEnum::RETURN_VALUE>().key((short)ret));
  122. ui.label_state->setText(str);
  123. delete pToolEvent;
  124. }
  125. void ToolDialogImpl::on_btnConfig_clicked()
  126. {
  127. if (m_pCamera)
  128. {
  129. m_pCamera->showParamConfigWindow();
  130. }
  131. }
  132. void ToolDialogImpl::on_btnSoftwareTrigger_clicked()
  133. {
  134. if (m_pCamera)
  135. {
  136. m_pCamera->softTriggerCap(m_strUserID);
  137. }
  138. }
  139. // 相机回调
  140. void ToolDialogImpl::CameraCallback(IBaseCamCommon::CamImgData* camdata, int frameCount, QString serial, long long userParam)
  141. {
  142. ToolDialogImpl* pParam = (ToolDialogImpl*)(userParam);
  143. if (pParam != NULL)
  144. {
  145. try
  146. {
  147. GenImage1(&pParam->m_Image, "byte", camdata->width, camdata->height, (Hlong)camdata->imgData);
  148. pParam->hwndUnit->ShowImage(pParam->m_Image);
  149. QString str = QString("TriggerIndex %1\nFrameNum %2\nLostPacket %3\nUserID %4").
  150. arg(camdata->nTriggerIndex).
  151. arg(camdata->nFrameNum).
  152. arg(camdata->nLostPacket).
  153. arg(pParam->m_strUserID);
  154. pParam->hwndUnit->ShowMsg(str.toStdString().c_str());
  155. pParam->hwndUnit->Refresh();
  156. emit pParam->sigUpdateImage();
  157. pParam->activator.wakeAll();
  158. pParam->m_nFrameNum = camdata->nFrameNum;
  159. }
  160. catch (...)
  161. {
  162. qWarning() << "CameraCallback Error";
  163. }
  164. }
  165. }
  166. // Log 回调
  167. void ToolDialogImpl::CameraLogCallback(QString serial, QString Massage, long long userParam)
  168. {
  169. ToolDialogImpl* pParam = (ToolDialogImpl*)(userParam);
  170. if (pParam != NULL)
  171. {
  172. }
  173. }