#include "DeviceTempleteCreator.h" DeviceTempleteCreator::DeviceTempleteCreator(QWidget* parent) { TAG_CAM_ROW_GROUP group; group.nColOffset = 0; group.nRowOffset = 0; group.nRowCameraCount = 0; group.nRowCameraIndex = 0; group.pNextIntersectGroup = nullptr; m_CameraRowGroupList.push_back(group); if (int(m_CameraRowGroupList.size()) != 0) m_pCurrentRowGroup = &m_CameraRowGroupList.back(); else m_pCurrentRowGroup = nullptr; ChangeCurrentGroup(m_pCurrentRowGroup); ui.setupUi(this); ui.ComboBoxSelectRow->addItem("0"); InitConnect(); } DeviceTempleteCreator::~DeviceTempleteCreator() { } void DeviceTempleteCreator::InitConnect() { ui.lineEditColStartX->init(QString("0"), true, CAMERA_COL_OFFSET_MAX); ui.lineEditColStartX->SetEditTarget(m_pCurrentColumnCameraOffset); ui.lineEditRowStartY->init(QString("0"), true, CAMERA_ROW_OFFSET_MAX); ui.lineEditRowStartY->SetEditTarget(m_pCurrentRowCameraOffset); ui.LineEditRowCameraNum->init(QString("0"), true, CAMERA_ROW_NUM_MAX); ui.LineEditRowCameraNum->SetEditTarget(m_pCurrentCameraNumber); ui.LineEditRowCameraNum->setValidator(new QIntValidator(CAMERA_ROW_NUM_MIN, CAMERA_ROW_NUM_MAX, this)); ui.lineEditRowIndex->init(QString("0"), true, CAMERA_ROW_NUM_MAX); ui.lineEditRowIndex->SetEditTarget(m_pCurrentCameraRowIndex); ui.lineEditRowIndex->setValidator(new QIntValidator(CAMERA_ROW_NUM_MIN, CAMERA_ROW_NUM_MAX, this)); connect(ui.ComboBoxSelectRow, QOverload::of(& QComboBox::currentIndexChanged), this, &DeviceTempleteCreator::OnComboBoxCurrentIndexChanged); connect(ui.PushButtonIncRow, &QPushButton::clicked, this, &DeviceTempleteCreator::OnAddRowButtonClicked); connect(ui.PushButtonDecRow,&QPushButton::clicked, this, &DeviceTempleteCreator::OnDeleteRowButtonClicked); connect(ui.LineEditRowCameraNum,&QLineEdit::textEdited, this, &DeviceTempleteCreator::OnRowCameraNumChanged); connect(ui.lineEditColStartX,&QLineEdit::textEdited, this, &DeviceTempleteCreator::OnColumnOffsetChanged); connect(ui.lineEditRowStartY,&QLineEdit::textEdited, this, &DeviceTempleteCreator::OnRowOffsetChanged); connect(ui.buttonBox, &QDialogButtonBox::accepted, this, &DeviceTempleteCreator::close); connect(ui.buttonBox, &QDialogButtonBox::rejected, this, &DeviceTempleteCreator::close); connect(ui.CheckCameraPoseHor,&QCheckBox::stateChanged, this, &DeviceTempleteCreator::OnHorCameraPosCheckBoxStateChanged); connect(ui.CheckCameraPoseVec,&QCheckBox::stateChanged, this, &DeviceTempleteCreator::OnVecCameraPosCheckBoxStateChanged); } void DeviceTempleteCreator::SetScene(CameraModifyScene* pScene) { m_pCameraModifyScene = pScene; ui.graphicsView->setScene(m_pCameraModifyScene); ui.graphicsView->setMouseTracking(true); ui.graphicsView->viewport()->rect().setRect(0, 0, CAMERA_SCENE_WIDTH, CAMERA_SCENE_HEIGHT); ui.graphicsView->setDragMode(ui.graphicsView->NoDrag); ui.graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui.graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); } void DeviceTempleteCreator::Excute() { show(); } void DeviceTempleteCreator::OnComboBoxCurrentIndexChanged(int index) { int nListSize = m_CameraRowGroupList.size(); //if (nListSize <= index) //{ // while (nListSize <= index) // { // m_CameraRowGroupList.push_back(TAG_CAM_ROW_GROUP()); // } // m_pCurrentRowGroup = &m_CameraRowGroupList.back(); // m_pCurrentRowGroup->nRowCameraIndex = index; //} //else { std::list::iterator it = m_CameraRowGroupList.begin(); for (int i = 0; i < index; i++) it++; m_nCurrentRowNum = index; m_pCurrentRowGroup = &(*it); ChangeCurrentGroup(m_pCurrentRowGroup); ui.lineEditColStartX->SetEditTarget(m_pCurrentColumnCameraOffset); ui.lineEditColStartX->setText(QString::number(m_pCurrentRowGroup->nColOffset)); ui.lineEditRowStartY->SetEditTarget(m_pCurrentRowCameraOffset); ui.lineEditRowStartY->setText(QString::number(m_pCurrentRowGroup->nRowOffset)); ui.LineEditRowCameraNum->SetEditTarget(m_pCurrentCameraNumber); ui.LineEditRowCameraNum->setText(QString::number(m_pCurrentRowGroup->nRowCameraCount)); ui.lineEditRowIndex->SetEditTarget(m_pCurrentCameraRowIndex); ui.lineEditRowIndex->setText(QString::number(m_pCurrentRowGroup->nRowCameraIndex)); } } void DeviceTempleteCreator::ChangeCurrentGroup(LPTAG_CAM_ROW_GROUP pCurrentGroup) { //init the current row camera offset m_pCurrentRowCameraOffset = &pCurrentGroup->nRowOffset; //init the current column camera offset m_pCurrentColumnCameraOffset = &pCurrentGroup->nColOffset; //init the current camera row index m_pCurrentCameraRowIndex = &pCurrentGroup->nRowCameraIndex; //init the current camera number m_pCurrentCameraNumber = &pCurrentGroup->nRowCameraCount; update(); } void DeviceTempleteCreator::OnAddRowButtonClicked() { int nListSize = m_CameraRowGroupList.size(); TAG_CAM_ROW_GROUP tagCamRowGroup; tagCamRowGroup.nRowCameraIndex = nListSize; m_CameraRowGroupList.push_back(tagCamRowGroup); m_pCurrentRowGroup = &m_CameraRowGroupList.back(); ui.ComboBoxSelectRow->addItem(QString::number(nListSize)); //ui.ComboBoxSelectRow->setCurrentIndex(nListSize); emit ui.ComboBoxSelectRow->currentIndexChanged(nListSize); } void DeviceTempleteCreator::OnDeleteRowButtonClicked() { int nCurrentDeleteIndex = m_pCurrentRowGroup->nRowCameraIndex; std::list::iterator it = m_CameraRowGroupList.begin(); for (int i = 0; i < nCurrentDeleteIndex; i++) it++; m_CameraRowGroupList.erase(it); //reset the index in group int nListSize = m_CameraRowGroupList.size(); it = m_CameraRowGroupList.begin(); for (int i = 0; i < nListSize; i++) { it->nRowCameraIndex = i; } } void DeviceTempleteCreator::OnRowCameraNumChanged(const QString& text) { int nCameraNum = text.toInt(); if(nCameraNum == *m_pCurrentCameraNumber) return; auto iter = m_CameraRowGroupList.begin(); for (int index = 0; index < (m_CameraRowGroupList.size()-1); index++) iter++; m_pCurrentRowGroup = &(*iter); if (m_pCurrentRowGroup != nullptr) { for (int i = 0; i < m_pCurrentRowGroup->CameraItemGroup.size(); i++) { std::list::iterator it = m_pCurrentRowGroup->CameraItemGroup.begin(); //remove the camera item m_pCameraModifyScene->removeItem(&(*(it++))); } } //update the camera row item number m_pCurrentRowGroup->CameraItemGroup.clear(); int nIndex = 0; while (nIndex < nCameraNum) { if (nIndex < *m_pCurrentCameraNumber) continue; else m_pCurrentRowGroup->CameraItemGroup.push_back(CameraItem()); nIndex++; } //put all item in group in scene again std::list::iterator it = m_pCurrentRowGroup->CameraItemGroup.begin(); for (int i = 0; i < m_pCurrentRowGroup->CameraItemGroup.size(); i++) { it->nItemColIndex = i; it->nItemRowIndex = *m_pCurrentCameraRowIndex; //add the camera item m_pCameraModifyScene->addItem(&(*(it++))); } //update the camera number *m_pCurrentCameraNumber = nCameraNum; //emit the camera item modified signal£¬let the camera item group Rearrange emit m_pCameraModifyScene->CameraItemModified(); } void DeviceTempleteCreator::OnRowOffsetChanged(const QString& text) { int nOffset = text.toInt(); *m_pCurrentRowCameraOffset = nOffset; emit m_pCameraModifyScene->CameraItemModified(); } void DeviceTempleteCreator::OnColumnOffsetChanged(const QString& text) { int nOffset = text.toInt(); *m_pCurrentColumnCameraOffset = nOffset; emit m_pCameraModifyScene->CameraItemModified(); } void DeviceTempleteCreator::closeEvent(QCloseEvent* event) { //updata the current group data //m_pCurrentRowGroup->nRowOffset = *m_pCurrentRowCameraOffset; //m_pCurrentRowGroup->nColOffset = *m_pCurrentColumnCameraOffset; //m_pCurrentRowGroup->nRowCameraIndex = *m_pCurrentCameraRowIndex; //m_pCurrentRowGroup->nRowCameraCount = *m_pCurrentCameraNumber; //carry on the close event QWidget::closeEvent(event); } void DeviceTempleteCreator::OnHorCameraPosCheckBoxStateChanged(int state) { if (ui.CheckCameraPoseHor->checkState()) { ui.CheckCameraPoseVec->setChecked(false); } else if (!ui.CheckCameraPoseHor->checkState()) { ui.CheckCameraPoseVec->setCheckable(true); } } void DeviceTempleteCreator::OnVecCameraPosCheckBoxStateChanged(int state) { if (ui.CheckCameraPoseVec->checkState()) { ui.CheckCameraPoseHor->setChecked(false); } else if (!ui.CheckCameraPoseVec->checkState()) { ui.CheckCameraPoseHor->setCheckable(true); } }