解释结论取消选中,合并复合层逻辑。

This commit is contained in:
DESKTOP-450PEFP\mainc 2026-03-14 11:55:10 +08:00
parent 746166482a
commit cd829e4692
3 changed files with 99 additions and 1 deletions

View File

@ -726,7 +726,12 @@ void TransparentGroupResult::onMousePress(QMouseEvent *event)
else
{
mDragMode = DragNone;
setSelectRect(false);
if (event->modifiers() & Qt::ControlModifier) {
//qDebug() << "鼠标点击时按住了Ctrl键";
}
else
setSelectRect(false);
return;
}
}

View File

@ -1247,6 +1247,9 @@ void QMyCustomPlot::contextMenuEvent(QContextMenuEvent *event)
menu.addAction(QIcon(::GetImagePath() + "icon/Split.png"), "分割为层内层", this, &QMyCustomPlot::segmentationInnerLayer);
menu.addAction(QIcon(::GetImagePath() + "icon/Split.png"), "分割为独立层", this, &QMyCustomPlot::segmentationIndependentLayer);
menu.addAction(QIcon(::GetImagePath() + "icon/Split.png"), "拆分复合层成独立层", this, &QMyCustomPlot::splitIndependentLayer);
QMap<double, TransparentGroupResult*> mapsort = this->getSelectGroupResult();
if (mapsort.size() > 1)
menu.addAction(QIcon(::GetImagePath() + "icon/decreasey.png"), "合并", this, &QMyCustomPlot::megResultLayer);
}
menu.exec(event->globalPos());
@ -3682,6 +3685,18 @@ void QMyCustomPlot::addItems_Gujing()
//取消选中
void QMyCustomPlot::ClearSelectItems()
{
if (m_strLineName == "RESULT")
{
QMap<double, TransparentGroupResult*> mapsort = this->getSelectGroupResult();
QList<TransparentGroupResult*> listGroup = mapsort.values();
for (int i = 0; i < listGroup.size(); i++)
{
TransparentGroupResult* pGroup = listGroup.at(i);
if (pGroup == NULL)
continue;
pGroup->setSelectRect(false);
}
}
//属性清空
PropertyService()->InitCurrentViewInfo();
}
@ -6934,6 +6949,21 @@ TransparentGroupResult* QMyCustomPlot::getCurGroupResult(double x_val)
return pClickGroup;
}
QMap<double, TransparentGroupResult*> QMyCustomPlot::getSelectGroupResult()
{
QMap<double, TransparentGroupResult*> mapsort;
QObjectList objList = m_mapDragGroup.values();
for (int i = 0; i < objList.size(); i++)
{
TransparentGroupResult *pGroup = qobject_cast<TransparentGroupResult *>(objList.at(i));
if (pGroup == nullptr || !pGroup->getSelect())
continue;
QCPRange rg = pGroup->getRange();
mapsort.insert(-rg.upper, pGroup);
}
return mapsort;
}
void QMyCustomPlot::segmentationInnerLayer()
{
//获取鼠标点位置
@ -7058,6 +7088,66 @@ void QMyCustomPlot::splitIndependentLayer()
this->replot();
}
void QMyCustomPlot::megResultLayer()
{
if (QMessageBox::information(NULL, QObject::tr("提示"), QObject::tr("合并为复合层?"), tr(""), tr("")) != 0) return;
// 筛选出选中的Group 并且排序
QMap<double, TransparentGroupResult*> mapsort = this->getSelectGroupResult();
if (mapsort.size() <= 0)
return;
// 取出Group下面的DraggableResult并且调整 lower删除原来选中的Group
double dupper;
double dlower;
QVector<QPair<QCPRange, QString>> gr;
QList<TransparentGroupResult*> listGroup = mapsort.values();
for (int i = 0; i < listGroup.size(); i++)
{
TransparentGroupResult* pGroup = listGroup.at(i);
if (pGroup == NULL)
continue;
if (i == 0)
{
dupper = pGroup->getRange().upper;
}
if (i == listGroup.size() - 1)
{
dlower = pGroup->getRange().lower;
}
const QVector<QString>& vec = pGroup->getVecResult();
const QMap<QString, QObject*>& mapResult = pGroup->getMapDraggable_Result();
for (int k = 0; k < vec.size(); k++)
{
TransparentDraggableResult* pret = qobject_cast<TransparentDraggableResult*>(mapResult.value(vec.at(k)));
if (pret == NULL)
continue;
QCPRange rg = pret->getRange();
if (i + 1 < listGroup.size())
{
TransparentGroupResult* pLowGroup = listGroup.at(i+1);
if (pGroup)
rg.lower = pLowGroup->getRange().upper;
}
gr << qMakePair(rg, pret->getResult());
}
pGroup->removeAllResult();
}
// 生成新的Group
QString strUuid = "";
TransparentGroupResult* pNewG = this->addResultGroup(dlower, dupper, strUuid);
strUuid = "";
for (int i = 0; i < gr.size(); i++)
{
const QPair<QCPRange, QString>& r = gr.at(i);
pNewG->addResultToPlot(r.first.lower, r.first.upper, r.second, strUuid);
}
this->replot();
}
bool QMyCustomPlot::getIsEditor()
{
if (m_strLineName == "RESULT")

View File

@ -407,9 +407,12 @@ public slots:
void updateGroupZone(); //更新层号
TransparentGroupResult* getCurGroupResult(double x_val);
// 筛选出选中的Group 并且排序
QMap<double, TransparentGroupResult*> getSelectGroupResult();
void segmentationInnerLayer(); // 分割为层内层
void segmentationIndependentLayer(); // 分割为独立层
void splitIndependentLayer(); // 拆分复合层成独立层
void megResultLayer();// 合并
bool getIsEditor();
//