#include "nmWxPropertyInterpolationDlg.h" #include #include #include #include #include #include #include #include #include #include #include #include #include namespace { // 使用独立翻译上下文,便于统一维护对话框文本 QString interpolationText(const char* sourceText) { return QCoreApplication::translate("nmWxPropertyInterpolationDlg", sourceText); } // 创建统一格式的非负数值输入框 QDoubleSpinBox* createNumberSpinBox(QWidget* parent, double value) { QDoubleSpinBox* spinBox = new QDoubleSpinBox(parent); spinBox->setRange(0.0, 1.0e12); spinBox->setDecimals(6); spinBox->setValue(value); spinBox->setButtonSymbols(QAbstractSpinBox::NoButtons); return spinBox; } } nmWxPropertyInterpolationDlg::nmWxPropertyInterpolationDlg(QWidget* parent) : iDlgBase(parent), m_pPropertyCombo(NULL), m_pNameEdit(NULL), m_pNewValueSpin(NULL), m_pMapPickButton(NULL), m_pPointTable(NULL), m_pDeletePointButton(NULL), m_pClearPointsButton(NULL), m_pNuggetSpin(NULL), m_pSillSpin(NULL), m_pRangeSpin(NULL), m_pModelCombo(NULL), m_pPreviewButton(NULL), m_pApplyButton(NULL) { setWindowTitle(interpolationText("Property Interpolation")); setWindowModality(Qt::NonModal); setModal(false); setMinimumSize(520, 620); resize(560, 680); initInterpolationUI(); } void nmWxPropertyInterpolationDlg::initInterpolationUI() { QVBoxLayout* mainLayout = new QVBoxLayout(this); // 插值属性及名称设置 QFormLayout* dataSetLayout = new QFormLayout; m_pPropertyCombo = new QComboBox(this); m_pPropertyCombo->addItem(interpolationText("Permeability k"), QString("k")); m_pPropertyCombo->addItem(interpolationText("Porosity phi"), QString("phi")); m_pPropertyCombo->addItem(interpolationText("Reservoir thickness h"), QString("h")); dataSetLayout->addRow(interpolationText("Property:"), m_pPropertyCombo); m_pNameEdit = new QLineEdit(interpolationText("Permeability"), this); dataSetLayout->addRow(interpolationText("Name:"), m_pNameEdit); mainLayout->addLayout(dataSetLayout); // 测点数据录入区域 QGroupBox* pointGroup = new QGroupBox(interpolationText("Measurement Points"), this); QVBoxLayout* pointLayout = new QVBoxLayout(pointGroup); QHBoxLayout* newPointLayout = new QHBoxLayout; newPointLayout->addWidget(new QLabel(interpolationText("New value:"), pointGroup)); m_pNewValueSpin = createNumberSpinBox(pointGroup, 0.0); newPointLayout->addWidget(m_pNewValueSpin, 1); m_pMapPickButton = new QPushButton(interpolationText("Select on Map"), pointGroup); m_pMapPickButton->setCheckable(true); // 地图选点功能将在后续阶段接入 m_pMapPickButton->setEnabled(false); newPointLayout->addWidget(m_pMapPickButton); pointLayout->addLayout(newPointLayout); // 每个测点保存坐标及对应的属性值 m_pPointTable = new QTableWidget(0, 3, pointGroup); QStringList headers; headers << interpolationText("X") << interpolationText("Y") << interpolationText("Value"); m_pPointTable->setHorizontalHeaderLabels(headers); m_pPointTable->horizontalHeader()->setResizeMode(QHeaderView::Stretch); m_pPointTable->setSelectionBehavior(QAbstractItemView::SelectRows); m_pPointTable->setSelectionMode(QAbstractItemView::SingleSelection); m_pPointTable->setAlternatingRowColors(true); pointLayout->addWidget(m_pPointTable, 1); // 测点列表管理按钮 QHBoxLayout* pointButtonLayout = new QHBoxLayout; pointButtonLayout->addStretch(); m_pDeletePointButton = new QPushButton(interpolationText("Delete Selected"), pointGroup); m_pDeletePointButton->setEnabled(false); pointButtonLayout->addWidget(m_pDeletePointButton); m_pClearPointsButton = new QPushButton(interpolationText("Clear"), pointGroup); m_pClearPointsButton->setEnabled(false); pointButtonLayout->addWidget(m_pClearPointsButton); pointLayout->addLayout(pointButtonLayout); mainLayout->addWidget(pointGroup, 1); // Kriging插值参数设置 QGroupBox* parameterGroup = new QGroupBox(interpolationText("Kriging Parameters"), this); QFormLayout* parameterLayout = new QFormLayout(parameterGroup); m_pNuggetSpin = createNumberSpinBox(parameterGroup, 0.01); parameterLayout->addRow(interpolationText("Nugget:"), m_pNuggetSpin); m_pSillSpin = createNumberSpinBox(parameterGroup, 100.0); parameterLayout->addRow(interpolationText("Sill:"), m_pSillSpin); m_pRangeSpin = createNumberSpinBox(parameterGroup, 1000.0); parameterLayout->addRow(interpolationText("Range:"), m_pRangeSpin); m_pModelCombo = new QComboBox(parameterGroup); m_pModelCombo->addItem(interpolationText("Spherical (0)"), 0); m_pModelCombo->addItem(interpolationText("Exponential (1)"), 1); m_pModelCombo->addItem(interpolationText("Gaussian (2)"), 2); parameterLayout->addRow(interpolationText("Model:"), m_pModelCombo); mainLayout->addWidget(parameterGroup); // 底部操作按钮 QHBoxLayout* buttonLayout = new QHBoxLayout; m_pPreviewButton = new QPushButton(interpolationText("Preview"), this); // 插值计算和预览功能将在后续阶段接入 m_pPreviewButton->setEnabled(false); buttonLayout->addWidget(m_pPreviewButton); buttonLayout->addStretch(); m_pApplyButton = new QPushButton(interpolationText("Apply"), this); m_pApplyButton->setEnabled(false); buttonLayout->addWidget(m_pApplyButton); QPushButton* closeButton = new QPushButton(interpolationText("Close"), this); buttonLayout->addWidget(closeButton); mainLayout->addLayout(buttonLayout); connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); }