修复带单位参数的数值回写

- 在单位换算完成后提交最新基准值
- 适配新的参数绑定处理接口
develop
lvjunjie 7 hours ago
parent 34a82fe087
commit 3afa2d7418

@ -156,7 +156,7 @@ protected:
virtual void connectSignalsOf(iGridRowItem* p) override;
/// @brief 参数项创建完成后的绑定处理(如产液段与有效长度的关联)
virtual void bindItems() override;
virtual void dealwithItemBinds() override;
// ================================================================
// 多井分组内部方法
@ -183,9 +183,20 @@ public slots:
/// @param bOk 是否成功获取
virtual void slotGetValueOf(QString sPara, QVariant& o, bool& bOk) override;
private slots:
/// @brief 单位换算完成后,使用最新基准值重新提交参数
void slotUnitEditorEditingFinished();
private:
/// @brief 连接所有带单位输入框的最终提交信号
void connectUnitEditorCommitSignals();
/// @brief 井名映射wellCode → 显示名)
QMap<QString, QString> m_mapWellNames;
/// @brief 输入框与对应单位参数项的映射
QMap<QLineEdit*, iGridRowItemUnt*> m_mapUnitEditorItems;
};

@ -2,6 +2,7 @@
#include "iGridRowGroup.h"
#include "iParameter.h"
#include "iSysParaHelper.h"
#include <QLineEdit>
// 井编码可能互为前缀,拆分参数时必须优先匹配更长的编码。
static bool longerStringFirst(const QString& a, const QString& b)
@ -93,7 +94,7 @@ bool nmGridRowUtils::buildRowUtils(QStringList listParas,
// 对象分组追加完成后,重新备份、绑定、计算布局。
bkAllItems();
bindItems();
dealwithItemBinds();
double h = getUtilHeight();
QRectF rt = QRectF(0, 0, 300, h);
@ -101,6 +102,8 @@ bool nmGridRowUtils::buildRowUtils(QStringList listParas,
setMinimumHeight(h);
}
connectUnitEditorCommitSignals();
return true;
}
@ -269,9 +272,47 @@ void nmGridRowUtils::connectSignalsOf(iGridRowItem* p)
iGridRowUtils::connectSignalsOf(p);
}
void nmGridRowUtils::bindItems()
void nmGridRowUtils::dealwithItemBinds()
{
iGridRowUtils::dealwithItemBinds();
}
void nmGridRowUtils::connectUnitEditorCommitSignals()
{
foreach (iGridRowItem* pItem, m_vecAllItems)
{
iGridRowItemUnt* pUnitItem = qobject_cast<iGridRowItemUnt*>(pItem);
if (pUnitItem == nullptr)
{
continue;
}
QLineEdit* pEditor = qobject_cast<QLineEdit*>(pUnitItem->getMainEditor());
if (pEditor == nullptr || m_mapUnitEditorItems.contains(pEditor))
{
iGridRowUtils::bindItems();
continue;
}
m_mapUnitEditorItems.insert(pEditor, pUnitItem);
connect(pEditor, SIGNAL(editingFinished()),
this, SLOT(slotUnitEditorEditingFinished()),
Qt::QueuedConnection);
}
}
void nmGridRowUtils::slotUnitEditorEditingFinished()
{
QLineEdit* pEditor = qobject_cast<QLineEdit*>(sender());
iGridRowItemUnt* pUnitItem = m_mapUnitEditorItems.value(pEditor, nullptr);
if (pEditor == nullptr || pUnitItem == nullptr)
{
return;
}
// Binder在editingFinished中更新基准值排队到其后再走参数项原有提交通道。
QMetaObject::invokeMethod(pUnitItem, "slotItemValueChanged",
Qt::DirectConnection,
Q_ARG(QString, pEditor->text()));
}
// ================================================================

Loading…
Cancel
Save