移除不需要的UI代码,修复一处由designerUI引起的退出崩溃bug

master
bob.pan 5 years ago
parent c0c4ef5782
commit 473cf53293

@ -20,7 +20,6 @@ CDsgAlgorithmParamMgrDlg::CDsgAlgorithmParamMgrDlg(QWidget *parent) : QDialog(pa
ui->pushButton_5->setVisible(false);
ui->pushButton_2->setVisible(false);
ui->pushButton_7->setVisible(false);
//ui->pushButton_6->setVisible(false);
ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->tableWidget, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(OnPopMenu(const QPoint&)));
connect(ui->tableWidget, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(OnEditParam()));
@ -406,23 +405,10 @@ bool CDsgAlgorithmParamMgrDlg::OnDownMove()
PLP_ALGORITHM_PARAM CDsgAlgorithmParamMgrDlg::ShowParamMgrDlg(IDetectorAlgorithm* lpAlgo)
{
// if (this->exec() == QDialog::Accepted)
// {
//// return GetCurrentDevice();
//// m_pSink->OnSetParam(m_pTask);
// return NULL;
// }
//open();
show();
return NULL;
}
void CDsgAlgorithmParamMgrDlg::CleanUp()
{
}
QString CDsgAlgorithmParamMgrDlg::GetParamTypeStr(AlgoParamType type)
{
QString strType;

@ -21,13 +21,8 @@ public:
bool Initialize(IDetectorEngine* lpDE, IDetectorTask* lpTask, IDetectorAlgorithm* lpAlgo, ParamDialogType type);
bool InitGraphView();
QString showVariant(const AlgoParamType type, const QVariant &var);
void CleanUp();
PLP_ALGORITHM_PARAM ShowParamMgrDlg(IDetectorAlgorithm* lpAlgo);
QString GetParamTypeStr(AlgoParamType type);
signals:
public slots :
bool OnAddParam();
bool OnDeleteParam();
@ -35,7 +30,6 @@ public slots :
bool OnPopMenu(const QPoint&);
bool OnUpMove();
bool OnDownMove();
private:
Ui::AlgorithmParamMgrDialog *ui{ nullptr };
CDsgParamDlg m_tParamDlg;

@ -1,7 +1,7 @@
#include "DsgParamDlg.h"
#include "ui_ParamDlg.h"
CDsgParamDlg::CDsgParamDlg(QWidget *parent) : QDialog(parent), m_valueCombox(this), m_tRoiDlg(this)
CDsgParamDlg::CDsgParamDlg(QWidget *parent) : QDialog(parent), m_valueCombox(this)
{
ui = new Ui::ParamDlg;
m_pTask = NULL;
@ -21,10 +21,16 @@ CDsgParamDlg::CDsgParamDlg(QWidget *parent) : QDialog(parent), m_valueCombox(thi
connect(ui->comboBox_2, SIGNAL(currentIndexChanged(int)), this, SLOT(OnChangeAlgo()));
connect(ui->m_pbROISet, SIGNAL(clicked()), this, SLOT(OnShowRoiDlg()));
m_pRoiDlg = new CDsgRoiDlg(this);
}
CDsgParamDlg::~CDsgParamDlg()
{
if (m_pRoiDlg)
{
delete m_pRoiDlg;
m_pRoiDlg = nullptr;
}
if (ui)
{
delete ui;
@ -133,15 +139,18 @@ bool CDsgParamDlg::OnChangeAlgo()
bool CDsgParamDlg::OnShowRoiDlg()
{
if (!m_tRoiDlg.Initialize(m_pDE, m_pAlgo, m_pTask))
if (!m_pRoiDlg)
return false;
if (!m_pRoiDlg->Initialize(m_pDE, m_pAlgo, m_pTask))
return false;
m_tRoiData.img = m_pTask->GetTaskInfo()->templateImg;
m_tRoiDlg.setParent(this);
m_tRoiDlg.setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
m_tRoiDlg.setWindowIcon(QIcon(":/image/leaper"));
m_tRoiDlg.setWindowModality(Qt::ApplicationModal);
m_tRoiDlg.setAttribute(Qt::WA_ShowModal, true);
m_tRoiData = m_tRoiDlg.ShowRoiDlg(m_tRoiData);
m_pRoiDlg->setParent(this);
m_pRoiDlg->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
m_pRoiDlg->setWindowIcon(QIcon(":/image/leaper"));
m_pRoiDlg->setWindowModality(Qt::ApplicationModal);
m_pRoiDlg->setAttribute(Qt::WA_ShowModal, true);
m_tRoiData = m_pRoiDlg->ShowRoiDlg(m_tRoiData);
return true;
}
@ -169,7 +178,6 @@ PLP_ALGORITHM_PARAM CDsgParamDlg::ShowParamDlg(PLP_ALGORITHM_PARAM pParam)
ui->comboBox_3->setCurrentIndex(srcParmID > 0 ? srcParmID : 0);
if (pParam->type == LP_ROI)
m_tRoiData = pParam->value.value<LP_DETECTOR_ROI_DATA>();
}
else
{
@ -233,94 +241,6 @@ PLP_ALGORITHM_PARAM CDsgParamDlg::ShowParamDlg(PLP_ALGORITHM_PARAM pParam)
int CDsgParamDlg::GetTypeIndex(AlgoParamType type)
{
return type;
int nIndex;
switch (type)
{
case LP_INT:
{
nIndex = 0;
break;
}
case LP_BOOLEAN:
{
nIndex = 1;
break;
}
case LP_STRING:
{
nIndex = 2;
break;
}
case LP_DOUBLE:
{
nIndex = 3;
break;
}
case LP_IMAGE:
{
nIndex = 4;
break;
}
case LP_POINT:
{
nIndex = 5;
break;
}
case LP_POINTF:
{
nIndex = 6;
break;
}
case LP_RECT:
{
nIndex = 7;
break;
}
case LP_RECTF:
{
nIndex = 8;
break;
}
case LP_ROI:
{
nIndex = 9;
break;
}
case LP_MAT:
{
nIndex = 10;
break;
}
case LP_LIST_INT:
{
nIndex = 11;
break;
}
case LP_LIST_BOOLEAN:
{
nIndex = 12;
break;
}
case LP_LIST_STRING:
{
nIndex = 13;
break;
}
case LP_LIST_DOUBLE:
{
nIndex = 14;
}
case LP_USER:
{
nIndex = 15;
}
default:
break;
}
return nIndex;
}
void CDsgParamDlg::InitValueCtrl(AlgoParamType type, PLP_ALGORITHM_PARAM pParam)
@ -354,12 +274,6 @@ void CDsgParamDlg::InitValueCtrl(AlgoParamType type, PLP_ALGORITHM_PARAM pParam)
break;
}
case LP_STRING:
//{
// ui->lineEdit_2->setHidden(false);
// m_valueCombox.setHidden(true);
// m_roiButton.setHidden(true);
// break;
//}
case LP_DOUBLE:
{
ui->label_2->setHidden(false);
@ -408,37 +322,6 @@ void CDsgParamDlg::InitValueCtrl(AlgoParamType type, PLP_ALGORITHM_PARAM pParam)
{
break;
}
//case LP_ALGO:
//{
// ui->lineEdit_2->setHidden(true);
// m_valueCombox.setHidden(false);
// m_valueCombox.clear();
// int nCurrentIndex = 0;
// int nAlgoCount = m_pTask->EnumAlgorithm(NULL, 0);
// if (nAlgoCount > 0)
// {
// IDetectorAlgorithm** lppAlgo = new IDetectorAlgorithm*[nAlgoCount];
// nAlgoCount = m_pTask->EnumAlgorithm(lppAlgo, nAlgoCount);
// for (int i = 0; i < nAlgoCount; i++)
// {
// if (lppAlgo[i])
// {
// m_valueCombox.insertItem(i, lppAlgo[i]->GetAlgorithmInfo()->strName, lppAlgo[i]->GetID());
// if (pParam && lppAlgo[i]->GetID() == pParam->value.toInt())
// {
// nCurrentIndex = i;
// }
// }
// }
// }
// if (pParam)
// m_valueCombox.setCurrentIndex(nCurrentIndex);
// break;
//}
default:
break;
}
@ -493,14 +376,10 @@ QVariant CDsgParamDlg::GetCtrlValue(AlgoParamType type)
}
case LP_MAT:
{
break;
}
//case LP_ALGO:
//{
// return m_valueCombox.itemData(m_valueCombox.currentIndex()).toInt();
//}
default:
break;
}
return NULL;
}
}

@ -40,7 +40,7 @@ public slots :
private:
Ui::ParamDlg *ui{ nullptr };
QComboBox m_valueCombox;
CDsgRoiDlg m_tRoiDlg;
CDsgRoiDlg* m_pRoiDlg{ nullptr };
IDetectorEngine* m_pDE{ nullptr };
IDetectorTask* m_pTask{ nullptr };

@ -3,12 +3,7 @@
#include "colossusbase.h"
#include "QPalette"
#pragma execution_character_set("utf-8")
/*
RECTANGLE = 0,
CIRCLE,
ELLIPSE,
POLY
*/
bool subDevListSort(const Item_List &info1, const Item_List &info2)
{
if (info1.size() < 0 || info2.size() < 0)
@ -37,7 +32,6 @@ bool subDevListSort(const Item_List &info1, const Item_List &info2)
CDsgRoiDlg::CDsgRoiDlg(QWidget *parent) : QDialog(parent), ui(new Ui::RoiDlg)
{
m_pDE = NULL;
m_pTask = NULL;
@ -46,36 +40,15 @@ CDsgRoiDlg::CDsgRoiDlg(QWidget *parent) : QDialog(parent), ui(new Ui::RoiDlg)
SystemStateInfo::rgb = QColor(255, 0, 0).rgb();
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(OnOk()));
connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(OnCancel()));
//connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(OnRectangle()));
connect(ui->pushButton_7, SIGNAL(clicked()), this, SLOT(OnCircle()));
//connect(ui->pushButton_4, SIGNAL(clicked()), this, SLOT(OnEllipse()));
connect(ui->pushButton_8, SIGNAL(clicked()), this, SLOT(OnShowColorDlg()));
ui->pushButton_8->setAutoDefault(false);
// connect(ui->pushButton_9, SIGNAL(clicked()), this, SLOT(OnSetItem()));
// connect(ui->pushButton_10, SIGNAL(clicked()), this, SLOT(OnMove()));
// connect(ui->pushButton_11, SIGNAL(clicked()), this, SLOT(OnMove()));
// connect(ui->pushButton_12, SIGNAL(clicked()), this, SLOT(OnMove()));
// connect(ui->pushButton_13, SIGNAL(clicked()), this, SLOT(OnMove()));
// connect(ui->pushButton_14, SIGNAL(clicked()), this, SLOT(OnSelectImage()));
// connect(ui->pushButton_15, SIGNAL(clicked()), this, SLOT(OnSnapCameraImage()));
// connect(ui->pushButton_16, SIGNAL(clicked()), this, SLOT(OnZoomOut()));
// connect(ui->pushButton_17, SIGNAL(clicked()), this, SLOT(OnZoomIn()));
connect(this, SIGNAL(sgShowCameraImage(QImage)), this, SLOT(OnShowCameraImage(QImage)));
connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(OnShowTenFlag()));
ui->pushButton_5->setText(QObject::tr("显示定位线"));
m_pRoiScene = new RoiScene(this);
//m_pRoiScene->SetRoiDlg(this);
m_pRoiScene->SetGraphicsView(ui->graphicsView);
m_pRoiScene->SetInfoLable(ui->label_pixel_info);
// Qt::WindowFlags flags = Qt::Dialog;
// flags |= Qt::WindowMinMaxButtonsHint;
// flags |= Qt::WindowCloseButtonHint;
// setWindowFlags(flags);
}
CDsgRoiDlg::~CDsgRoiDlg()
@ -85,34 +58,36 @@ CDsgRoiDlg::~CDsgRoiDlg()
delete m_pRoiScene;
m_pRoiScene = nullptr;
}
if (ui)
{
delete ui;
ui = nullptr;
}
}
bool CDsgRoiDlg::Initialize(IDetectorEngine* pDE, IDetectorAlgorithm* pAlgo, IDetectorTask* pTask)
{
if (!pDE || !pAlgo || !pTask)
return false;
m_pDE = pDE;
m_pTask = pTask;
if (!InitGraphView())
return false;
return true;
}
bool CDsgRoiDlg::InitGraphView()
{
ui->pushButton_5->setText(QObject::tr("显示定位线"));
ui->graphicsView->setUserData(0, (QObjectUserData*)1);
ui->graphicsView->setScene(m_pRoiScene);
ui->pushButton_5->setText(QObject::tr("显示定位线"));
ui->graphicsView->setRenderHint(QPainter::Antialiasing);
ui->graphicsView->setResizeAnchor(QGraphicsView::AnchorUnderMouse);
ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
m_pRoiScene->updateTenItem(false);
m_pRoiScene->update();
if (m_pRoiScene)
{
ui->graphicsView->setScene(m_pRoiScene);
m_pRoiScene->updateTenItem(false);
m_pRoiScene->update();
}
ui->graphicsView->update();
return true;
@ -120,7 +95,8 @@ bool CDsgRoiDlg::InitGraphView()
bool CDsgRoiDlg::OnOk()
{
//TODO 检查绑定内容
if (!m_pRoiScene)
return false;
QList<QGraphicsItem *> items = m_pRoiScene->items();
QList<GraphicsItem *> temp;
int nSize = items.size();
@ -172,23 +148,16 @@ void CDsgRoiDlg::OnShowColorDlg()
return ;
QString strRGB = QString("(%1,%2,%3)").arg(QString::number(color.red()), QString::number(color.green()), QString::number(color.blue()));
ui->lineEdit_3->setText(strRGB);
ui->lineEdit_3->setUserData(0, (QObjectUserData*)color.rgb());
QString strStyle = QString("background-color:rgba(%1,%2,%3,255);").arg(color.red()).arg(color.green()).arg(color.blue());
ui->lineEdit_3->setStyleSheet(strStyle);
SystemStateInfo::rgb = color.rgb();
return;
}
void CDsgRoiDlg::OnShowCameraImage(QImage img)
{
m_tempRoiData.img = ColossusBase::QImage2cvMat(img).clone();
m_pRoiScene->Initialize(m_tempRoiData);
m_pRoiScene->DisableMenu(false);
//m_pRoiScene->updateTenItem(true);
}
void CDsgRoiDlg::OnShowTenFlag()
{
if (!m_pRoiScene)
return;
QString strtext = ui->pushButton_5->text();
if (strtext == QObject::tr("显示定位线"))
{
@ -202,32 +171,15 @@ void CDsgRoiDlg::OnShowTenFlag()
}
}
void __stdcall RoiImageEventHandler(void * callBackOwner, QImage& img, int nDeviceID)
{
CDsgRoiDlg* p = (CDsgRoiDlg*)(callBackOwner);
emit p->sgShowCameraImage(img);
}
void CDsgRoiDlg::OnSnapCameraImage()
{
// DeviceType type;
// IDetectorCameraDevice* pCamera = (IDetectorCameraDevice*)m_pDeviceMgr->GetDevice(m_pTask->GetTaskInfo()->nCameraID, type);
// if (!pCamera && type != CAMERA)
// return;
//
// pCamera->SnapImage(this, RoiImageEventHandler);
}
void CDsgRoiDlg::OnSelectImage()
{
if (!m_pRoiScene)
return;
QString strFileName = QFileDialog::getOpenFileName(this, "open file", "", "Images (*.bmp *.png *.xpm *.jpg)");
if (strFileName.length() > 0)
{
std::string strpath = strFileName.toLocal8Bit().toStdString();
m_tempRoiData.img = cv::imread(strpath/*strFileName.toLocal8Bit().data()*/, CV_LOAD_IMAGE_UNCHANGED);
// m_tempRoiData.img = cv::imread(strFileName.toLatin1().data());
// m_pRoiScene->InitShowImage(m_tempRoiData.img);
m_tempRoiData.img = cv::imread(strpath, CV_LOAD_IMAGE_UNCHANGED);
m_pRoiScene->Initialize(m_tempRoiData);
m_pRoiScene->DisableMenu(false);
}
@ -243,34 +195,37 @@ LP_DETECTOR_ROI_DATA CDsgRoiDlg::ShowRoiDlg(LP_DETECTOR_ROI_DATA roiData)
QColor color(SystemStateInfo::rgb);
QString strRGB = QString("(%1,%2,%3)").arg(QString::number(color.red()), QString::number(color.green()), QString::number(color.blue()));
ui->lineEdit_3->setText(strRGB);
ui->lineEdit_3->setUserData(0, (QObjectUserData*)color.rgb());
QString strStyle = QString("background-color:rgba(%1,%2,%3,255);").arg(color.red()).arg(color.green()).arg(color.blue());
ui->lineEdit_3->setStyleSheet(strStyle);
QDesktopWidget* desktop = QApplication::desktop();//
QDesktopWidget* desktop = QApplication::desktop();
move((desktop->width() - this->width()) / 2, (desktop->height() - this->height()) / 2);
if (this->exec() == QDialog::Accepted)
{
FillRoi(m_tempRoiData);
m_pRoiScene->DisableMenu(true);
if (m_pRoiScene)
{
m_pRoiScene->DisableMenu(true);
}
SystemStateInfo::setIni.setValue(QStringLiteral("roi_color"), SystemStateInfo::rgb);
return m_tempRoiData;
}
m_pRoiScene->DisableMenu(true);
if (m_pRoiScene)
{
m_pRoiScene->DisableMenu(true);
}
return roiData;
}
bool CDsgRoiDlg::FillRoi(LP_DETECTOR_ROI_DATA& roiData)
{
if (!m_pRoiScene)
return false;
roiData.records.clear();
QList<QGraphicsItem *> items = m_pRoiScene->items();
QList<GraphicsItem *> temp;
int nSize = items.size();
for (int i = 0; i < nSize; i++)
{
@ -288,189 +243,179 @@ bool CDsgRoiDlg::FillRoi(LP_DETECTOR_ROI_DATA& roiData)
GraphicsItem *item = temp.at(j);
Item_List record;
{
Feature_List tItem;
ItemType type = item->GetType();
QRectF itemRect = item->mapRectToScene(item->boundingRect());;
QPointF itemPoint = item->pos() + m_pRoiScene->GetOffSet();
switch (type)
{
Feature_List tItem;
ItemType type = item->GetType();
QRectF itemRect = item->mapRectToScene(item->boundingRect());;
QPointF itemPoint = item->pos() + m_pRoiScene->GetOffSet();
switch (type)
{
case GraphicsRect:
{
tItem.first = RECTANGLE;
if (!roiData.img.empty()){
if (itemRect.x() < -(roiData.img.cols / 2))
{
itemRect.setX(-(roiData.img.cols / 2));
itemPoint.setX(itemPoint.x() + itemRect.width());
}
if (itemRect.y() < -(roiData.img.rows / 2))
{
itemRect.setY(-(roiData.img.rows / 2));
itemPoint.setY(itemPoint.y() + itemRect.width());
}
if (itemRect.x() + itemRect.width() > roiData.img.cols / 2)
{
int width = itemRect.width();
itemRect.setX(roiData.img.cols / 2 - width);
itemRect.setWidth(width);
itemPoint.setX(itemPoint.x() - width / 2);
}
if (itemRect.y() + itemRect.height() > roiData.img.rows / 2)
{
int width = itemRect.height();
itemRect.setY(roiData.img.rows / 2 - width);
itemRect.setHeight(width);
itemPoint.setY(itemPoint.y() - width / 2);
}
if (itemRect.width() > roiData.img.cols / 2 || itemRect.height() > roiData.img.rows / 2)
{
itemRect.setWidth(roiData.img.cols);
itemRect.setHeight(roiData.img.rows);
itemPoint.setY(roiData.img.rows / 2);
itemPoint.setX(roiData.img.cols / 2);
}
case GraphicsRect:
{
tItem.first = RECTANGLE;
if (!roiData.img.empty()) {
if (itemRect.x() < -(roiData.img.cols / 2))
{
itemRect.setX(-(roiData.img.cols / 2));
itemPoint.setX(itemPoint.x() + itemRect.width());
}
if (itemRect.y() < -(roiData.img.rows / 2))
{
itemRect.setY(-(roiData.img.rows / 2));
itemPoint.setY(itemPoint.y() + itemRect.width());
}
tItem.second.push_back(itemPoint.x());
tItem.second.push_back(itemPoint.y());
tItem.second.push_back(itemRect.width());
tItem.second.push_back(itemRect.height());
break;
}
case GraphicsCircle:
{
tItem.first = CIRCLE;
if (!roiData.img.empty()){
if (itemRect.x() < -(roiData.img.cols/2))
{
itemRect.setX(-(roiData.img.cols / 2));
itemPoint.setX(itemPoint.x() + itemRect.width());
}
if (itemRect.y() < -(roiData.img.rows / 2))
{
itemRect.setY(-(roiData.img.rows / 2));
itemPoint.setY(itemPoint.y() + itemRect.width());
}
if (itemRect.x()+itemRect.width() > roiData.img.cols / 2)
{
int width = itemRect.width();
itemRect.setX(roiData.img.cols / 2-width);
itemRect.setWidth(width);
itemPoint.setX(itemPoint.x() - width / 2);
}
if (itemRect.y() + itemRect.width() > roiData.img.rows / 2)
{
int width = itemRect.width();
itemRect.setY(roiData.img.rows / 2-width);
itemRect.setWidth(width);
itemPoint.setY(itemPoint.y() - width / 2);
}
if (itemRect.width() > roiData.img.rows/2||itemRect.height()>roiData.img.cols/2)
{
int minWidth = 100;
if (roiData.img.rows > roiData.img.cols)
minWidth = roiData.img.cols;
else
minWidth = roiData.img.rows;
itemRect.setWidth(minWidth);
itemRect.setHeight(minWidth);
itemPoint.setY(roiData.img.rows / 2);
itemPoint.setX(roiData.img.cols / 2);
}
if (itemRect.x() + itemRect.width() > roiData.img.cols / 2)
{
int width = itemRect.width();
itemRect.setX(roiData.img.cols / 2 - width);
itemRect.setWidth(width);
itemPoint.setX(itemPoint.x() - width / 2);
}
if (itemRect.y() + itemRect.height() > roiData.img.rows / 2)
{
int width = itemRect.height();
itemRect.setY(roiData.img.rows / 2 - width);
itemRect.setHeight(width);
itemPoint.setY(itemPoint.y() - width / 2);
}
tItem.second.push_back(itemPoint.x());
tItem.second.push_back(itemPoint.y());
tItem.second.push_back(itemRect.width() / 2);
break;
if (itemRect.width() > roiData.img.cols / 2 || itemRect.height() > roiData.img.rows / 2)
{
itemRect.setWidth(roiData.img.cols);
itemRect.setHeight(roiData.img.rows);
itemPoint.setY(roiData.img.rows / 2);
itemPoint.setX(roiData.img.cols / 2);
}
}
case GraphicsEllipse:
{
if (!roiData.img.empty()){
if (itemRect.x() < -(roiData.img.cols / 2))
{
itemRect.setX(-(roiData.img.cols / 2));
itemPoint.setX(itemPoint.x() + itemRect.width());
}
if (itemRect.y() < -(roiData.img.rows / 2))
{
itemRect.setY(-(roiData.img.rows / 2));
itemPoint.setY(itemPoint.y() + itemRect.width());
}
if (itemRect.x() + itemRect.width() > roiData.img.cols / 2)
{
int width = itemRect.width();
itemRect.setX(roiData.img.cols / 2 - width);
itemRect.setWidth(width);
itemPoint.setX(itemPoint.x() - width / 2);
}
if (itemRect.y() + itemRect.height() > roiData.img.rows / 2)
{
int width = itemRect.height();
itemRect.setY(roiData.img.rows / 2 - width);
itemRect.setHeight(width);
itemPoint.setY(itemPoint.y() - width / 2);
}
if (itemRect.width() > roiData.img.cols / 2 || itemRect.height() > roiData.img.rows / 2)
{
itemRect.setWidth(roiData.img.cols);
itemRect.setHeight(roiData.img.rows);
itemPoint.setY(roiData.img.rows / 2);
itemPoint.setX(roiData.img.cols / 2);
}
tItem.second.push_back(itemPoint.x());
tItem.second.push_back(itemPoint.y());
tItem.second.push_back(itemRect.width());
tItem.second.push_back(itemRect.height());
break;
}
case GraphicsCircle:
{
tItem.first = CIRCLE;
if (!roiData.img.empty()) {
if (itemRect.x() < -(roiData.img.cols / 2))
{
itemRect.setX(-(roiData.img.cols / 2));
itemPoint.setX(itemPoint.x() + itemRect.width());
}
if (itemRect.y() < -(roiData.img.rows / 2))
{
itemRect.setY(-(roiData.img.rows / 2));
itemPoint.setY(itemPoint.y() + itemRect.width());
}
tItem.first = ELLIPSE;
tItem.second.push_back(itemPoint.x());
tItem.second.push_back(itemPoint.y());
tItem.second.push_back(itemRect.width() / 2);
tItem.second.push_back(itemRect.height() / 2);
break;
}
case GraphicsPoly:
break;
default:
break;
if (itemRect.x() + itemRect.width() > roiData.img.cols / 2)
{
int width = itemRect.width();
itemRect.setX(roiData.img.cols / 2 - width);
itemRect.setWidth(width);
itemPoint.setX(itemPoint.x() - width / 2);
}
if (itemRect.y() + itemRect.width() > roiData.img.rows / 2)
{
int width = itemRect.width();
itemRect.setY(roiData.img.rows / 2 - width);
itemRect.setWidth(width);
itemPoint.setY(itemPoint.y() - width / 2);
}
if (itemRect.width() > roiData.img.rows / 2 || itemRect.height() > roiData.img.cols / 2)
{
int minWidth = 100;
if (roiData.img.rows > roiData.img.cols)
minWidth = roiData.img.cols;
else
minWidth = roiData.img.rows;
itemRect.setWidth(minWidth);
itemRect.setHeight(minWidth);
itemPoint.setY(roiData.img.rows / 2);
itemPoint.setX(roiData.img.cols / 2);
}
}
record.push_back(tItem);
tItem.second.push_back(itemPoint.x());
tItem.second.push_back(itemPoint.y());
tItem.second.push_back(itemRect.width() / 2);
break;
}
case GraphicsEllipse:
{
if (!roiData.img.empty()) {
if (itemRect.x() < -(roiData.img.cols / 2))
{
itemRect.setX(-(roiData.img.cols / 2));
itemPoint.setX(itemPoint.x() + itemRect.width());
}
if (itemRect.y() < -(roiData.img.rows / 2))
{
itemRect.setY(-(roiData.img.rows / 2));
itemPoint.setY(itemPoint.y() + itemRect.width());
}
records.push_back(record);
if (itemRect.x() + itemRect.width() > roiData.img.cols / 2)
{
int width = itemRect.width();
itemRect.setX(roiData.img.cols / 2 - width);
itemRect.setWidth(width);
itemPoint.setX(itemPoint.x() - width / 2);
}
if (itemRect.y() + itemRect.height() > roiData.img.rows / 2)
{
int width = itemRect.height();
itemRect.setY(roiData.img.rows / 2 - width);
itemRect.setHeight(width);
itemPoint.setY(itemPoint.y() - width / 2);
}
if (itemRect.width() > roiData.img.cols / 2 || itemRect.height() > roiData.img.rows / 2)
{
itemRect.setWidth(roiData.img.cols);
itemRect.setHeight(roiData.img.rows);
itemPoint.setY(roiData.img.rows / 2);
itemPoint.setX(roiData.img.cols / 2);
}
}
//delete[] lppItem;
delete item;
tItem.first = ELLIPSE;
tItem.second.push_back(itemPoint.x());
tItem.second.push_back(itemPoint.y());
tItem.second.push_back(itemRect.width() / 2);
tItem.second.push_back(itemRect.height() / 2);
break;
}
case GraphicsPoly:
break;
default:
break;
}
record.push_back(tItem);
}
records.push_back(record);
delete item;
}
if (records.size() > 1){
//排序 ROI最小的放在前面
qSort(records.begin(), records.end(), subDevListSort);
}
roiData.records=records;//
roiData.records = records;
return true;
}
void CDsgRoiDlg::CleanUp()
{
}
void CDsgRoiDlg::OnMove()
{
if (!m_pRoiScene)
return;
if (sender()->objectName() == "pushButton_10")
{
m_pRoiScene->MoveSelectedItem(LEFT);
@ -490,87 +435,24 @@ void CDsgRoiDlg::OnMove()
}
void CDsgRoiDlg::OnSetItem()
{
//QList<QGraphicsItem *> items = m_pTaskScene->items();
//GraphicsItem *item1;
//GraphicsItem *item2;
//int nSize = items.size();
//for (int i = 0; i < nSize; i++)
//{
// GraphicsItem *item = qgraphicsitem_cast<GraphicsItem*>(items.at(i));
// if (item && item->GetType() == GraphicsRect)
// {
//
// item1 = item;
// }
// if (item && item->GetType() == GraphicsCircle)
// {
// item2 = item;
// }
//}
//QList<QGraphicsItem *> temp1 = item1->collidingItems(Qt::ContainsItemShape);
// int b = temp1.size();
//for (int k = 0; k < b; k++)
//{
// int aa = temp1.at(k)->type();
// int bb = temp1.at(k)->Type;
//}
//QList<QGraphicsItem *> temp2 = item2->collidingItems(Qt::ContainsItemShape);
//int c = temp2.size();
//bool bRet1 = item1->collidesWithItem(item2, Qt::ContainsItemShape);
//bool bRet2 = item2->collidesWithItem(item1, Qt::ContainsItemShape);
//QPointF pos1 = item1->pos();
//QPointF pos2 = item2->pos();
//int a = 0;
// QPoint pos;
// QRect size;
// pos.setX(ui->lineEdit_4->text().toInt() - m_pRoiScene->GetOffSet().x());
// pos.setY(ui->lineEdit_5->text().toInt() - m_pRoiScene->GetOffSet().y());
// size.setWidth(ui->lineEdit_6->text().toInt());
// size.setHeight(ui->lineEdit_7->text().toInt());
// m_pRoiScene->SetSelectedItem(pos, size);
}
void CDsgRoiDlg::ResetItem(QPoint pos, QRect size)
{
// ui->lineEdit_4->clear();
// ui->lineEdit_5->clear();
// ui->lineEdit_6->clear();
// ui->lineEdit_7->clear();
//
// ui->lineEdit_4->setText(QString::number(pos.x()));
// ui->lineEdit_5->setText(QString::number(pos.y()));
//
// ui->lineEdit_6->setText(QString::number(size.width()));
// ui->lineEdit_7->setText(QString::number(size.height()));
}
void CDsgRoiDlg::showEvent(QShowEvent *evt)
{
if (!m_pRoiScene)
return;
m_pRoiScene->Initialize(m_tempRoiData);
m_pRoiScene->DisableMenu(false);
// ui->lineEdit_4->clear();
// ui->lineEdit_5->clear();
// ui->lineEdit_6->clear();
// ui->lineEdit_7->clear();
}
void CDsgRoiDlg::OnZoomIn()
{
if (!m_pRoiScene)
return;
m_pRoiScene->zoomImage(true);
}
void CDsgRoiDlg::OnZoomOut()
{
if (!m_pRoiScene)
return;
m_pRoiScene->zoomImage(false);
}

@ -10,7 +10,7 @@ namespace Ui {
class RoiDlg;
}
class CDsgRoiDlg : public QDialog//, public IDetectorUISink
class CDsgRoiDlg : public QDialog
{
Q_OBJECT
public:
@ -19,17 +19,11 @@ public:
bool Initialize(IDetectorEngine* pDE, IDetectorAlgorithm* pAlgo, IDetectorTask* pTask);
bool InitGraphView();
LP_DETECTOR_ROI_DATA ShowRoiDlg(LP_DETECTOR_ROI_DATA roiData);
void CleanUp();
bool FillRoi(LP_DETECTOR_ROI_DATA& roiData);
virtual void ResetItem(QPoint pos, QRect size);
virtual void OnManualTrigger(){}
virtual void OnSetParam(IDetectorTask* pTask){}
virtual void showEvent(QShowEvent *evt);
signals:
void sgShowCameraImage(QImage);
public slots :
bool OnOk();
bool OnCancel();
@ -38,15 +32,9 @@ public slots :
void OnCircle();
void OnShowColorDlg();
void OnMove();
void OnSetItem();
void OnZoomIn();
void OnZoomOut();
void OnSelectImage();
void OnSnapCameraImage();
void OnShowCameraImage(QImage img);
void OnShowTenFlag();
private:
Ui::RoiDlg *ui;

@ -177,7 +177,6 @@ bool CMainFrame::OnMainMenuTrigger(QAction* pAction)
return false;
}
}
return false;
}
@ -1186,7 +1185,6 @@ bool CMainFrame::OnEditParam()
return true;
}
}
}
return false;
}

@ -13,11 +13,6 @@
<height>590</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="windowTitle">
<string>ROI检测区域配置</string>
</property>
@ -85,11 +80,6 @@
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="title">
<string>工具</string>
</property>
@ -187,11 +177,6 @@
</layout>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="title">
<string>绘图区域:</string>
</property>
@ -213,14 +198,6 @@
</property>
<item>
<widget class="QLabel" name="label_pixel_info">
<property name="font">
<font>
<family>Arial</family>
<pointsize>8</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Pixel info: </string>
</property>

@ -36,7 +36,6 @@ RoiScene::~RoiScene()
delete pTenLineITemH;
if (pTenLineITemV)
delete pTenLineITemV;
}
void RoiScene::mouseEvent(QGraphicsSceneMouseEvent *mouseEvent)
@ -286,62 +285,56 @@ void RoiScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
void RoiScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
if (DrawTool::c_drawShape == selection)
{
if (DrawTool::c_drawShape == selection)
{
QList<QGraphicsItem *> items = this->selectedItems();
GraphicsItem *item = 0;
if (items.count() == 1)
item = qgraphicsitem_cast<GraphicsItem*>(items.first());
if (item == 0)
return;
if(item->GetLock())
return;
DrawTool * tool = DrawTool::findTool(DrawTool::c_drawShape);
m_tCurrentPos = maptoImgPos(mouseEvent->scenePos());
updateInfoLable();
if (tool)
tool->mouseMoveEvent(mouseEvent, this);
QGraphicsScene::mouseMoveEvent(mouseEvent);
}
else
{
DrawTool * tool = DrawTool::findTool(DrawTool::c_drawShape);
m_tCurrentPos = maptoImgPos(mouseEvent->scenePos());
updateInfoLable();
if (tool)
tool->mouseMoveEvent(mouseEvent, this);
QGraphicsScene::mouseMoveEvent(mouseEvent);
}
}
}
QList<QGraphicsItem *> items = this->selectedItems();
GraphicsItem *item = 0;
if (items.count() == 1)
item = qgraphicsitem_cast<GraphicsItem*>(items.first());
if (item == 0)
return;
if(item->GetLock())
return;
void RoiScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
DrawTool * tool = DrawTool::findTool(DrawTool::c_drawShape);
m_tCurrentPos = maptoImgPos(mouseEvent->scenePos());
updateInfoLable();
if (tool)
tool->mouseMoveEvent(mouseEvent, this);
QGraphicsScene::mouseMoveEvent(mouseEvent);
}
else
{
DrawTool * tool = DrawTool::findTool(DrawTool::c_drawShape);
m_tCurrentPos = maptoImgPos(mouseEvent->scenePos());
updateInfoLable();
if (tool)
tool->mouseReleaseEvent(mouseEvent, this);
tool->mouseMoveEvent(mouseEvent, this);
QGraphicsScene::mouseMoveEvent(mouseEvent);
}
}
QList<QGraphicsItem *> items = this->selectedItems();
GraphicsItem *item = 0;
void RoiScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
DrawTool * tool = DrawTool::findTool(DrawTool::c_drawShape);
if (tool)
tool->mouseReleaseEvent(mouseEvent, this);
if (items.count() == 1)
item = qgraphicsitem_cast<GraphicsItem*>(items.first());
QList<QGraphicsItem *> items = this->selectedItems();
GraphicsItem *item = 0;
if (item != 0)
{
//m_pRoiDlg->ResetItem(maptoImgPos(mouseEvent->scenePos()), item->boundingRect().toRect());
emit sgResetItem(maptoImgPos(mouseEvent->scenePos()), item->boundingRect().toRect());
if (items.count() == 1)
item = qgraphicsitem_cast<GraphicsItem*>(items.first());
m_graphItemMapStruct[item].rectf = maptoImgNewPos(item);
DrawTool::c_drawShape = selection;
QGraphicsScene::mouseReleaseEvent(mouseEvent);
}
if (item != 0)
{
//m_pRoiDlg->ResetItem(maptoImgPos(mouseEvent->scenePos()), item->boundingRect().toRect());
emit sgResetItem(maptoImgPos(mouseEvent->scenePos()), item->boundingRect().toRect());
m_graphItemMapStruct[item].rectf = maptoImgNewPos(item);
DrawTool::c_drawShape = selection;
QGraphicsScene::mouseReleaseEvent(mouseEvent);
}
}
void RoiScene::MoveSelectedItem(DirType type)
@ -427,7 +420,6 @@ void RoiScene::keyPressEvent(QKeyEvent *event)
return QGraphicsScene::keyPressEvent(event);;
}
void RoiScene::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
QPointF p =event->pos();
@ -534,7 +526,6 @@ void RoiScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
radiusFixAction = menu.addAction(QObject::tr("径向绑定"));
radiusFixAction->setObjectName("radiusFixAction");
}
}
}
@ -773,6 +764,8 @@ QPoint RoiScene::maptoImgPos(QPointF& iscenePos)
void RoiScene::InitShowImage(cv::Mat img)
{
if (!mpGraphicsView)
return;
if (img.empty())
return;
@ -782,14 +775,9 @@ void RoiScene::InitShowImage(cv::Mat img)
return;
clear();
// if (m_pImageItem)
// {
// m_pImageItem->setPixmap(QPixmap::fromImage(*mpShowImage));
// }
// else
{
m_pImageItem = addPixmap(QPixmap::fromImage(*mpShowImage));
}
m_pImageItem = addPixmap(QPixmap::fromImage(*mpShowImage));
mImgPosOffSet = QPoint(mpShowImage->width() / 2, mpShowImage->height() / 2);
m_pImageItem->setOffset(-mpShowImage->width() / 2.0, -mpShowImage->height() / 2.0);
@ -798,27 +786,7 @@ void RoiScene::InitShowImage(cv::Mat img)
mImgOriSize = mpShowImage->size();
qreal scale = std::min((qreal)mpGraphicsView->width() / mImgOriSize.width(), (qreal)mpGraphicsView->height() / mImgOriSize.height());
scaleImg(scale);
setSceneRect(-mImgOriSize.width() / 2, -mImgOriSize.height()/2, mImgOriSize.width(), mImgOriSize.height());
// QGraphicsLineItem *pTenLineITemH{ NULL };
// QGraphicsLineItem *pTenLineITemV{ NULL };
// if (pTenLineITemH){
// removeItem(pTenLineITemH);
// pTenLineITemH = NULL;
// }
// if (pTenLineITemV){
// removeItem(pTenLineITemV);
// pTenLineITemV = NULL;
// }
// QLine lineV(QPoint(0, -mImgOriSize.height()/2), QPoint(0, mImgOriSize.height()/2));
//
// QLine lineH(QPoint(-mImgOriSize.width()/2, 0), QPoint(mImgOriSize.width()/2, 0));
// QPen pen(Qt::green, 5);
// addLine(lineH, pen);
// addLine(lineV, pen);
return;
}

@ -46,79 +46,62 @@ public:
explicit RoiScene(QObject *parent = 0);
~RoiScene();
int getGraphItems() const{ return m_graphItemMapStruct.size(); };
void mouseEvent(QGraphicsSceneMouseEvent *mouseEvent)/*{}*/;
bool Initialize(LP_DETECTOR_ROI_DATA roiData)/*{ return false; }*/;
bool CheckRecord(Item_List &record, int maxwidth, int maxheight)/*{ return false; }*/;
bool InitRecord(Item_List record, int nIndex)/*{ return false; }*/;
void InitShowImage(cv::Mat img)/*{}*/;
void DisableMenu(bool bRet){ m_bDisableMenu = bRet; }
void MoveSelectedItem(DirType type)/*{}*/;
void SetSelectedItem(QPoint pos, QRect size)/*{}*/;
//void SetRoiDlg(IDetectorUISink* lpRoiDlg){ m_pRoiDlg = lpRoiDlg; }
void mouseEvent(QGraphicsSceneMouseEvent *mouseEvent);
bool Initialize(LP_DETECTOR_ROI_DATA roiData);
bool CheckRecord(Item_List &record, int maxwidth, int maxheight);
bool InitRecord(Item_List record, int nIndex);
void InitShowImage(cv::Mat img);
void DisableMenu(bool bRet) { m_bDisableMenu = bRet; }
void MoveSelectedItem(DirType type);
void SetSelectedItem(QPoint pos, QRect size);
void SetGraphicsView(QGraphicsView* ipGV){ mpGraphicsView = ipGV; }
void SetInfoLable(QLabel* ipLable){ mpInfoLabel = ipLable; }
QPointF GetOffSet(){ return mImgPosOffSet; }
void zoomImage(bool bZoomIn)/*{}*/;
void scaleImageWithFixedViewSize()/*{}*/;
bool InImgRectangel(GraphicsItem *pItem)/*{ return false; }*/;
void zoomImage(bool bZoomIn);
void scaleImageWithFixedViewSize();
bool InImgRectangel(GraphicsItem *pItem);
QPointF getCenterPoint(){ return centerPoint; };
QPointF getStartPoint(){ return startPoint; };
void updateLineItem()/*{}*/;
void updateTenItem(bool bFlag)/*{}*/;
void updateLineItem();
void updateTenItem(bool bFlag);
int flag{ 0 };
bool bUseTenFlag{ false };
signals:
void sgResetItem(QPoint pos, QRect size);
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)/*{}*/;
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)/*{}*/;
void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)/*{}*/;
void wheelEvent(QGraphicsSceneWheelEvent * wheelEvent)/*{}*/;
void keyPressEvent(QKeyEvent *event)/*{}*/;
void hoverEnterEvent(QGraphicsSceneHoverEvent *event)/*{}*/;
void hoverLeaveEvent(QGraphicsSceneHoverEvent * event)/*{}*/;
void hoverMoveEvent(QGraphicsSceneHoverEvent *event)/*{}*/;
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event)/*{}*/;
void scaleImg(qreal scale)/*{}*/;
void updateInfoLable()/*{}*/;
QRectF maptoImgNewPos(GraphicsItem *pItem)/*{ return QRectF(); }*/;
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent);
void wheelEvent(QGraphicsSceneWheelEvent * wheelEvent);
void keyPressEvent(QKeyEvent *event);
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent(QGraphicsSceneHoverEvent * event);
void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
void scaleImg(qreal scale);
void updateInfoLable();
QRectF maptoImgNewPos(GraphicsItem *pItem);
QPoint maptoImgPos(QPointF& iscenePos);
protected:
QPoint m_tCurrentPos;
QGraphicsPixmapItem* m_pImageItem;
QGraphicsPixmapItem* m_pImageItem{ nullptr };
bool m_bDisableMenu;
//IDetectorUISink* m_pRoiDlg;
QGraphicsView* mpGraphicsView;
QLabel* mpInfoLabel;
QGraphicsView* mpGraphicsView{ nullptr };
QLabel* mpInfoLabel{ nullptr };
QSize mImgOriSize;
// position offset that should be applied to pos in img item's coordinate sys,
// to get the pos in img mat's coordinates (0, 0 on the left up corner)
QPointF mImgPosOffSet;
QImage* mpShowImage;
QPoint maptoImgPos(QPointF& iscenePos)/*{ return QPoint(); }*/;
QImage* mpShowImage{ nullptr };
QPointF centerPoint;
QPointF startPoint;
qreal mFixedSizeScale{1.0};
//QMap<GraphicsItem*, QRectF> m_graphItemMap;
qreal mFixedSizeScale{ 1.0 };
QMap<GraphicsItem*, tagROIParas> m_graphItemMapStruct;
QGraphicsLineItem *pLineItem{ NULL };
QGraphicsLineItem *pLineItem{ nullptr };
QGraphicsLineItem *pTenLineITemH{ NULL };
QGraphicsLineItem *pTenLineITemV{ NULL };
QGraphicsLineItem *pTenLineITemH{ nullptr };
QGraphicsLineItem *pTenLineITemV{ nullptr };
};
#endif // ROISCENE

@ -51,7 +51,6 @@ void SizeHandleRect::updateCursor()
void SizeHandleRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QColor c = QColor("limegreen");
// c.setAlpha(200);
painter->setPen(Qt::NoPen);
painter->setBrush(QBrush(c));
QRectF rectsize = rect();

@ -441,6 +441,11 @@ lpMainWin::~lpMainWin()
delete m_pDllEngineCtrl;
m_pDllEngineCtrl = nullptr;
}
if (m_pDesigner)
{
delete m_pDesigner;
m_pDesigner = nullptr;
}
}
bool lpMainWin::onInitCoreCtrl()

Loading…
Cancel
Save