#include "ToolDialog.h" #include #include #include #include #include ToolDialogImpl::ToolDialogImpl(QWidget *parent) : DllToolDialog(parent) { ui.setupUi(this); this->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint /*| Qt::WindowStaysOnTopHint*/); // 显示控件初始化 hwndUnit = new HWndUnit(this); Util::ShowUnitInWidget(ui.Image_widget, hwndUnit); connect(this, SIGNAL(sigUpdateUI()), this, SLOT(on_UpdateUI())); connect(this, SIGNAL(sigUpdateImage()), this, SLOT(OnUpdateImage())); m_pCamera = nullptr; m_bIsBindCallback = false; m_nFrameNum = 0; } ToolDialogImpl::~ToolDialogImpl() { } VPEnum::RETURN_VALUE ToolDialogImpl::Execute() { // 以线程方式启动软触发 QFuture Future = QtConcurrent::run(this, &ToolDialogImpl::on_UpdateUI); // 阻塞等待线程执行 Future.waitForFinished(); // on_UpdateUI(); return VPEnum::RETURN_VALUE::Success; } void ToolDialogImpl::Running(bool bRun) { } bool ToolDialogImpl::Serialized(QDataStream& ar, bool bIsOut) { int m_Value = 0; int paranum;//参数数量 if (bIsOut)//保存参数流程 { paranum = 1; ar << paranum;//先保存参数数量 ar << (int)1 << m_Value; } else//加载参数流程,参数加载顺序一定要跟保存顺序一致 { int nSize1 = 0; int para; ar >> paranum;//读取参数数量 for (int i = 0; i < paranum; i++) { ar >> para; switch (para) { case 1: ar >> m_Value; break; default: { qWarning() << "Serialized(In) Error" ; return false; } break; } } //hwndUnit->getHWndCtrl()->useROIController(&roiController); } return true; } void ToolDialogImpl::on_UpdateUI() { if (m_pCamera != nullptr) { if (!m_bIsBindCallback) { int nCallBackSize = m_pCamera->getReceCallBackSIze(); m_strUserID = QString("user%1").arg(nCallBackSize); m_pCamera->setReceCallBack(CameraCallback, (long long)this, m_strUserID); m_bIsBindCallback = true; } m_pCamera->softTriggerCap(m_strUserID); mutex.lock(); activator.wait(&mutex, 1000); mutex.unlock(); } } void ToolDialogImpl::OnUpdateImage() { QCoreApplication::sendEvent(this->m_pEventTarget, &this->m_PickEvent); } /// /// 确定 /// void ToolDialogImpl::on_btnOK_clicked() { this->hide(); } /// /// 取消按钮 /// void ToolDialogImpl::on_btnCancel_clicked() { // 将本工具的恢复到打开工具之前的状态 RecoverData(); } /// /// 测试按钮 /// void ToolDialogImpl::on_btnExecute_clicked() { QElapsedTimer toolTimer; toolTimer.start(); // 发送事件 ToolEvent* pToolEvent = new ToolEvent(m_strPouName, m_strInstanceName, TOOL_EVENT_TYPE::TOOL_TRIGGER); QCoreApplication::sendEvent(m_pEventTarget, pToolEvent); // 统计返回值 VPEnum::RETURN_VALUE ret = pToolEvent->ret; double nExecTime = toolTimer.elapsed(); QString str; str = QString("耗时: %1 ms").arg(nExecTime, 0, 'G', 5); ui.label_time->setText(str); str = QString("状态: %1 ").arg(QMetaEnum::fromType().key((short)ret)); ui.label_state->setText(str); delete pToolEvent; } void ToolDialogImpl::on_btnConfig_clicked() { if (m_pCamera) { m_pCamera->showParamConfigWindow(); } } void ToolDialogImpl::on_btnSoftwareTrigger_clicked() { if (m_pCamera) { m_pCamera->softTriggerCap(m_strUserID); } } // 相机回调 void ToolDialogImpl::CameraCallback(IBaseCamCommon::CamImgData* camdata, int frameCount, QString serial, long long userParam) { ToolDialogImpl* pParam = (ToolDialogImpl*)(userParam); if (pParam != NULL) { try { GenImage1(&pParam->m_Image, "byte", camdata->width, camdata->height, (Hlong)camdata->imgData); pParam->hwndUnit->ShowImage(pParam->m_Image); QString str = QString("TriggerIndex %1\nFrameNum %2\nLostPacket %3\nUserID %4"). arg(camdata->nTriggerIndex). arg(camdata->nFrameNum). arg(camdata->nLostPacket). arg(pParam->m_strUserID); pParam->hwndUnit->ShowMsg(str.toStdString().c_str()); pParam->hwndUnit->Refresh(); emit pParam->sigUpdateImage(); pParam->activator.wakeAll(); pParam->m_nFrameNum = camdata->nFrameNum; } catch (...) { qWarning() << "CameraCallback Error"; } } } // Log 回调 void ToolDialogImpl::CameraLogCallback(QString serial, QString Massage, long long userParam) { ToolDialogImpl* pParam = (ToolDialogImpl*)(userParam); if (pParam != NULL) { } }