diff --git a/common/geometryutils.cpp b/common/geometryutils.cpp index 13e9f0e..fa2f217 100644 --- a/common/geometryutils.cpp +++ b/common/geometryutils.cpp @@ -1205,3 +1205,14 @@ QByteArray UTF8ToGBK(const QString& utf8Str) { return gbkCodec->fromUnicode(utf8Str); } +int extractNumbers(QString strExp, const QString& input) { + QRegularExpression re(strExp); + QRegularExpressionMatch match = re.match(input); + + int number = -1; + if (match.hasMatch()) { + QString numberStr = match.captured(1); // 获取括号内匹配的内容 + number = numberStr.toInt(); + } + return number; +} diff --git a/common/geometryutils.h b/common/geometryutils.h index e4aadbf..429efb0 100644 --- a/common/geometryutils.h +++ b/common/geometryutils.h @@ -239,6 +239,7 @@ int GetLineWidth(QPainter * painter,int flWidth); QString GBKToUTF8(const QByteArray& gbkData); QByteArray UTF8ToGBK(const QString& utf8Str); +int extractNumbers(QString strExp, const QString& input); struct WellHead { diff --git a/logPlus/PropertyWidget.cpp b/logPlus/PropertyWidget.cpp index 7bb06c8..dfba898 100644 --- a/logPlus/PropertyWidget.cpp +++ b/logPlus/PropertyWidget.cpp @@ -499,8 +499,31 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant double lower = variant.value(); m_tdJieshi->setDragRect(1, -lower); } - else if ("油气结论" == m_propertyData[pProperty]) + else { + QString strProperty = m_propertyData[pProperty]; + if (strProperty == "油气结论") + { + m_tdJieshi->setDragResult(0, variant.toString()); + return; + } + int nidx = strProperty.indexOf("油气结论"); + if (nidx >= 0) + { + int nret = extractNumbers("油气结论(\\d+)", strProperty); + m_tdJieshi->setDragResult(nret, variant.toString()); + return; + } + nidx = strProperty.indexOf("分段点"); + if (nidx >= 0) + { + int nret = extractNumbers("分段点(\\d+)深度", strProperty); + m_tdJieshi->setDragDepth(nret, variant.toDouble()); + + return; + } + + } } } @@ -1488,7 +1511,7 @@ void PropertyWidget::ChangFillProperty() } -void PropertyWidget::_CreateVariantPropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, int propertyType) +QtVariantProperty* PropertyWidget::_CreateVariantPropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, int propertyType) { QtProperty *pGroupItem =NULL; { @@ -1508,6 +1531,7 @@ void PropertyWidget::_CreateVariantPropertyItem(QString strGroup, QString strPro item->setValue(vtPropertyValue); m_propertyData[item] = strPropertyCaption; pGroupItem->addSubProperty(item); + return item; } void PropertyWidget::_CreateVariantPropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, int propertyType, double dMin, double dMax) @@ -2059,15 +2083,23 @@ void PropertyWidget::initJieshiItemProperty(TransparentGroupResult* tdJieshi, do _CreateVariantPropertyItem("当前项", "顶深(m)", -upper, QVariant::Double); _CreateVariantPropertyItem("当前项", "底深(m)", -lower, QVariant::Double); _CreateVariantPropertyItem("当前项", "解释层号", tdJieshi->getTitle(), QVariant::String); - _CreateVariantPropertyItem("当前项", "油气结论", strResult, VariantManager::filePathTypeId()); - _CreateVariantPropertyItem("当前项", "备注", "", QVariant::String); + QtVariantProperty* pItem = _CreateVariantPropertyItem("当前项", "油气结论", tdJieshi->getOilGasConclusion(0), VariantManager::filePathTypeId()); + m_pVariantManager->setAttribute(pItem, "filepath", GetOilSymbolDir()); + m_pVariantManager->setAttribute(pItem, "filter", "图片(*.png *.svg)"); + + _CreateVariantPropertyItem("当前项", "备注", tdJieshi->getRemark(), QVariant::String); for (int i = 1; i <= 10; i++) { - _CreateVariantPropertyItem("当前项", QString("油气结论%1").arg(i), strResult, VariantManager::filePathTypeId()); + QString s = tdJieshi->getOilGasConclusion(i); + QtVariantProperty* pItem = _CreateVariantPropertyItem("当前项", QString("油气结论%1").arg(i), s, VariantManager::filePathTypeId()); + //pItem->setAttribute("FilePath", "123542"); + m_pVariantManager->setAttribute(pItem, "filepath", GetOilSymbolDir()); + m_pVariantManager->setAttribute(pItem, "filter", "图片(*.png *.svg)"); } for (int i = 1; i <= 10; i++) { - _CreateVariantPropertyItem("当前项", QString("分段点%1深度").arg(i), strResult, VariantManager::filePathTypeId()); + QString s = tdJieshi->getOilGasDepth(i); + _CreateVariantPropertyItem("当前项", QString("分段点%1深度").arg(i), s, QVariant::Double); } //当前属性类型 m_strCurrentProperty = JieshiItem_Property; diff --git a/logPlus/PropertyWidget.h b/logPlus/PropertyWidget.h index 97e0c61..9522e90 100644 --- a/logPlus/PropertyWidget.h +++ b/logPlus/PropertyWidget.h @@ -129,7 +129,7 @@ public: public: QWidget* GetPropertyWidget(); - void _CreateVariantPropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, int propertyType); + QtVariantProperty* _CreateVariantPropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, int propertyType); void _CreateVariantPropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, int propertyType, double dMin, double dMax); void _CreateEnumPropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, QStringList listValue); diff --git a/logPlus/TransparentDraggableResult.cpp b/logPlus/TransparentDraggableResult.cpp index ad837d9..6eeb24a 100644 --- a/logPlus/TransparentDraggableResult.cpp +++ b/logPlus/TransparentDraggableResult.cpp @@ -163,7 +163,7 @@ void TransparentDraggableResult::drawResult(double left_Low, double right_Hight, } // 设置矩形范围 -void TransparentDraggableResult::setRange(double left_Low, double right_Hight) +void TransparentDraggableResult::setRange(double left_Low, double right_Hight, bool bupdate) { if(left_Low >= right_Hight) return; @@ -202,7 +202,8 @@ void TransparentDraggableResult::setRange(double left_Low, double right_Hight) updateHandles(); //后面统一刷新上方和下方rect - //mPlot->replot(); + if(bupdate) + mPlot->replot(); } void TransparentDraggableResult::setShowProperty(int nCopr, int nSPos, bool bupdate) @@ -212,7 +213,7 @@ void TransparentDraggableResult::setShowProperty(int nCopr, int nSPos, bool bupd if (bupdate) { - setRange(mRect->topLeft->key(), mRect->bottomRight->key()); + setRange(mRect->topLeft->key(), mRect->bottomRight->key(), true); } } @@ -239,6 +240,11 @@ void TransparentDraggableResult::setColor(const QColor &color) { //mPlot->replot(); } +QString TransparentDraggableResult::getResult() +{ + return m_Result; +} + // 删除框图 void TransparentDraggableResult::deleteRect() { diff --git a/logPlus/TransparentDraggableResult.h b/logPlus/TransparentDraggableResult.h index a8736da..8637acc 100644 --- a/logPlus/TransparentDraggableResult.h +++ b/logPlus/TransparentDraggableResult.h @@ -34,7 +34,7 @@ public: void drawResult(double left_Low, double right_Hight, double lY1, double lY2); // 设置矩形范围 - void setRange(double left_Low, double right_Hight); + void setRange(double left_Low, double right_Hight, bool bupdate = false); // 设置结论占比% void setShowProperty(int nCopr, int nSPos, bool bupdate = false); void setDragRange(double left_Low, double right_Hight); @@ -43,6 +43,8 @@ public: // 设置矩形颜色 void setColor(const QColor &color); + + QString getResult(); // 删除框图 void deleteRect(); diff --git a/logPlus/TransparentGroupResult.cpp b/logPlus/TransparentGroupResult.cpp index 6058efc..d068bd8 100644 --- a/logPlus/TransparentGroupResult.cpp +++ b/logPlus/TransparentGroupResult.cpp @@ -85,6 +85,7 @@ void TransparentGroupResult::addAllResultToPlot(LAYER_DATA* pResult) { QMap zoneOrder = GetZoneOrder();//初始化ZoneOrder 层序号根据层位名来,配置文件在conf\\RESULT.txt + m_Remark = GBKToUTF8(pResult->Description10); // QDir fexit; QString result_str = QString::number(pResult->Result); @@ -142,6 +143,16 @@ QString TransparentGroupResult::getTitle() return mstrTitle; } +void TransparentGroupResult::setRemark(QString remark) +{ + m_Remark = remark; +} + +QString TransparentGroupResult::getRemark() +{ + return m_Remark; +} + //设置解释结论 void TransparentGroupResult::setResult(QString filePath) { @@ -345,6 +356,40 @@ void TransparentGroupResult::setDragRect(int dMode, double dragVal) mPlot->replot(); } +void TransparentGroupResult::setDragResult(int nidx, QString strResult) +{ + if (nidx < 0 || nidx >= m_vecResult.size()) + return; + + const QString& uid = m_vecResult.at(nidx); + TransparentDraggableResult* pDrag = qobject_cast(m_mapDraggable_Result.value(uid)); + if (pDrag == NULL) + return; + pDrag->setResult(strResult); + pDrag->setShowProperty(m_nConclusionProportion, m_nShowPos, true); +} + +void TransparentGroupResult::setDragDepth(int nidx, double dDepth) +{ + if (nidx < 0 || nidx >= m_vecResult.size()) + return; + + const QString& uid = m_vecResult.at(nidx); + TransparentDraggableResult* pDrag = qobject_cast(m_mapDraggable_Result.value(uid)); + if (pDrag == NULL) + return; + QCPRange rg = pDrag->getRange(); + pDrag->setRange(rg.lower, -dDepth, true); + + // 上方TransparentDraggableResult,Rect更新 + TransparentDraggableResult* upDrag = pDrag->getUpResult(); + if (upDrag) + { + QCPRange rg = upDrag->getRange(); + upDrag->setRange(-dDepth, rg.upper, true); + } +} + // 删除框图 void TransparentGroupResult::deleteRect() { @@ -392,6 +437,37 @@ int TransparentGroupResult::getCursor() return 0; } +QString TransparentGroupResult::getOilGasConclusion(int nidx) +{ + QString ret = ""; + if (nidx >= m_vecResult.size()) + return ret; + + const QString& uid = m_vecResult.at(nidx); + + TransparentDraggableResult* pDrag = qobject_cast(m_mapDraggable_Result.value(uid)); + if (pDrag == NULL) + return ret; + + QFileInfo fileInfo(pDrag->getResult()); + return fileInfo.baseName(); +} + +QString TransparentGroupResult::getOilGasDepth(int nidx) +{ + QString ret = ""; + if (nidx >= m_vecResult.size()) + return ret; + + const QString& uid = m_vecResult.at(nidx); + + TransparentDraggableResult* pDrag = qobject_cast(m_mapDraggable_Result.value(uid)); + if (pDrag == NULL) + return ret; + + return QString("%1").arg(-pDrag->getRange().upper); +} + void TransparentGroupResult::initRect() { // 创建透明矩形 diff --git a/logPlus/TransparentGroupResult.h b/logPlus/TransparentGroupResult.h index cf757e5..7cd3bda 100644 --- a/logPlus/TransparentGroupResult.h +++ b/logPlus/TransparentGroupResult.h @@ -32,6 +32,9 @@ public: //设置标题 void setTitle(QString strTitle); QString getTitle(); + + void setRemark(QString remark); + QString getRemark(); //设置解释结论 void setResult(QString filePath); @@ -56,6 +59,10 @@ public: //设置顶深, 底深 void setDragRect(int dMode, double dragVal); + //设置解释结论 + void setDragResult(int nidx, QString strResult); + //设置分段深度 + void setDragDepth(int nidx, double dDepth); // 删除框图 void deleteRect(); @@ -63,6 +70,12 @@ public: void setSelectRect(bool bselect); int getCursor(); + + // 获取油气结论 + QString getOilGasConclusion(int nidx); + // 获取分段点深度 + QString getOilGasDepth(int nidx); + signals: void rangeChanged(QCPRange newRange); @@ -99,6 +112,7 @@ private: QString m_strUuid = ""; QString m_Result; + QString m_Remark=""; DragMode mDragMode = DragNone; //double mDragStartX = 0; diff --git a/logPlus/fileedit.cpp b/logPlus/fileedit.cpp index 2b10612..b8dea84 100644 --- a/logPlus/fileedit.cpp +++ b/logPlus/fileedit.cpp @@ -51,10 +51,12 @@ FileEdit::FileEdit(QWidget *parent) void FileEdit::buttonClicked() { - QString filePath = QFileDialog::getOpenFileName(this, tr("选择文件"), theLineEdit->text(), theFilter); + QString filePath = QFileDialog::getOpenFileName(this, tr("选择文件"), strFilePath, theFilter); if (filePath.isNull()) return; - theLineEdit->setText(filePath); + + QFileInfo finfo(filePath); + theLineEdit->setText(finfo.baseName()); emit filePathChanged(filePath); } diff --git a/logPlus/fileedit.h b/logPlus/fileedit.h index f2c60d2..4860811 100644 --- a/logPlus/fileedit.h +++ b/logPlus/fileedit.h @@ -32,8 +32,15 @@ class FileEdit : public QWidget Q_OBJECT public: FileEdit(QWidget *parent = 0); - void setFilePath(const QString &filePath) { if (theLineEdit->text() != filePath) theLineEdit->setText(filePath); } + void setValue(const QString &value) + { + if (theLineEdit->text() != value) + theLineEdit->setText(value); + } QString filePath() const { return theLineEdit->text(); } + + void setFilePath(const QString &fpath) { strFilePath = fpath; } + void setFilter(const QString &filter) { theFilter = filter; } QString filter() const { return theFilter; } signals: @@ -47,6 +54,7 @@ private slots: void buttonClicked(); private: QLineEdit *theLineEdit; + QString strFilePath = ""; QString theFilter; }; diff --git a/logPlus/variantfactory.cpp b/logPlus/variantfactory.cpp index 4efdd34..051966b 100644 --- a/logPlus/variantfactory.cpp +++ b/logPlus/variantfactory.cpp @@ -24,6 +24,7 @@ #include "variantfactory.h" #include "variantmanager.h" #include "fileedit.h" +#include "qtvariantproperty.h" VariantFactory::~VariantFactory() { @@ -46,9 +47,23 @@ QWidget *VariantFactory::createEditor(QtVariantPropertyManager *manager, QtProperty *property, QWidget *parent) { if (manager->propertyType(property) == VariantManager::filePathTypeId()) { + FileEdit *editor = new FileEdit(parent); - editor->setFilePath(manager->value(property).toString()); - editor->setFilter(manager->attributeValue(property, QLatin1String("filter")).toString()); + + QString strPath = manager->value(property).toString(); + QString strValue = strPath; + QString strFilter = manager->attributeValue(property, QLatin1String("filter")).toString(); + VariantManager* pMgr = qobject_cast(manager); + if (pMgr) + { + strValue = pMgr->value(property).toString(); + strPath = pMgr->filepath(property).toString(); + strPath += strValue; + strFilter = pMgr->filter(property).toString(); + } + editor->setFilePath(strPath); + editor->setValue(strValue); + editor->setFilter(strFilter); theCreatedEditors[property].append(editor); theEditorToProperty[editor] = property; diff --git a/logPlus/variantmanager.cpp b/logPlus/variantmanager.cpp index 071554d..f1137b2 100644 --- a/logPlus/variantmanager.cpp +++ b/logPlus/variantmanager.cpp @@ -55,6 +55,20 @@ QVariant VariantManager::value(const QtProperty *property) const return QtVariantPropertyManager::value(property); } +QVariant VariantManager::filter(const QtProperty *property) const +{ + if (theValues.contains(property)) + return theValues[property].filter; + return QtVariantPropertyManager::value(property); +} + +QVariant VariantManager::filepath(const QtProperty *property) const +{ + if (theValues.contains(property)) + return theValues[property].filepath; + return QtVariantPropertyManager::value(property); +} + QStringList VariantManager::attributes(int propertyType) const { if (propertyType == filePathTypeId()) { @@ -113,20 +127,28 @@ void VariantManager::setValue(QtProperty *property, const QVariant &val) void VariantManager::setAttribute(QtProperty *property, const QString &attribute, const QVariant &val) { - if (theValues.contains(property)) { - if (attribute == QLatin1String("filter")) { - if (val.type() != QVariant::String && !val.canConvert(QVariant::String)) - return; - QString str = val.value(); - Data d = theValues[property]; - if (d.filter == str) - return; - d.filter = str; - theValues[property] = d; - emit attributeChanged(property, attribute, str); - } - return; - } + if (theValues.contains(property)) { + + if (val.type() != QVariant::String && !val.canConvert(QVariant::String)) + return; + QString str = val.value(); + Data d = theValues[property]; + if (attribute == QLatin1String("filter")) { + if (d.filter == str) + return; + d.filter = str; + } + else if (attribute == QLatin1String("filepath")) + { + if (d.filepath == str) + return; + d.filepath = str; + } + theValues[property] = d; + emit attributeChanged(property, attribute, str); + + return; + } QtVariantPropertyManager::setAttribute(property, attribute, val); } diff --git a/logPlus/variantmanager.h b/logPlus/variantmanager.h index 27824c9..5f8467a 100644 --- a/logPlus/variantmanager.h +++ b/logPlus/variantmanager.h @@ -34,9 +34,11 @@ class VariantManager : public QtVariantPropertyManager public: VariantManager(QObject *parent = 0) : QtVariantPropertyManager(parent) - { } + { } virtual QVariant value(const QtProperty *property) const; + virtual QVariant filter(const QtProperty *property) const; + virtual QVariant filepath(const QtProperty *property) const; virtual int valueType(int propertyType) const; virtual bool isPropertyTypeSupported(int propertyType) const; @@ -58,6 +60,7 @@ private: struct Data { QString value; QString filter; + QString filepath; }; QMap theValues; };