EnergySpectrumAnalyer/src/NuclideLib/NuclideRayDialog.cpp

134 lines
4.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "NuclideRayDialog.h"
NuclideRayDialog::NuclideRayDialog(bool isEdit, const QStringList& rayData, QWidget *parent)
: QDialog(parent), m_isEdit(isEdit)
{
// 编辑模式下提取ID和已有数据
if (isEdit && !rayData.isEmpty()) {
m_id = rayData[0]; // 第一个元素是ID
}
initUI();
// 编辑模式:填充已有数据
if (isEdit && rayData.size() >= 8) {
m_cmbRayType->setCurrentText(rayData[1]);
m_leRayMev->setText(rayData[2]);
m_leRayMevUnc->setText(rayData[3]);
m_leBranchRatio->setText(rayData[4]);
m_leBranchRatioUnc->setText(rayData[5]);
m_cmbMainRayIdent->setCurrentText(rayData[6]);
m_leJiahePeak->setText(rayData[7]);
}
}
void NuclideRayDialog::initUI()
{
setWindowTitle(m_isEdit ? "编辑射线信息" : "添加射线信息");
setFixedSize(450, 300);
QFormLayout *formLayout = new QFormLayout(this);
// 射线类型下拉框(常用核素射线类型)
m_cmbRayType = new QComboBox(this);
m_cmbRayType->addItems({"γ", "β⁻", "β⁺", "α", "X射线", "中子", "电子俘获"});
formLayout->addRow("射线类型", m_cmbRayType);
m_leRayMev = new QLineEdit(this);
m_leRayMev->setPlaceholderText("例如1.332 MeV");
formLayout->addRow("射线能量", m_leRayMev);
m_leRayMevUnc = new QLineEdit(this);
m_leRayMevUnc->setPlaceholderText("例如0.001 MeV");
formLayout->addRow("能量不确定度", m_leRayMevUnc);
m_leBranchRatio = new QLineEdit(this);
m_leBranchRatio->setPlaceholderText("例如0.9998");
formLayout->addRow("分支比", m_leBranchRatio);
m_leBranchRatioUnc = new QLineEdit(this);
m_leBranchRatioUnc->setPlaceholderText("例如0.0001");
formLayout->addRow("分支比不确定度", m_leBranchRatioUnc);
// 主射线标识下拉框
m_cmbMainRayIdent = new QComboBox(this);
m_cmbMainRayIdent->addItems({"", ""});
formLayout->addRow("是否为主射线", m_cmbMainRayIdent);
m_leJiahePeak = new QLineEdit(this);
m_leJiahePeak->setPlaceholderText("无则留空");
formLayout->addRow("加和峰", m_leJiahePeak);
// 按钮盒
QDialogButtonBox *btnBox = new QDialogButtonBox(
QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
Qt::Horizontal, this);
formLayout->addRow(btnBox);
// 信号连接
connect(btnBox, &QDialogButtonBox::accepted, this, [this]() {
if (validateInput()) {
accept();
}
});
connect(btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
}
bool NuclideRayDialog::validateInput()
{
// 必填项校验
if (m_leRayMev->text().trimmed().isEmpty()) {
QMessageBox::warning(this, "输入错误", "射线能量不能为空!");
return false;
}
if (m_leRayMevUnc->text().trimmed().isEmpty()) {
QMessageBox::warning(this, "输入错误", "能量不确定度不能为空!");
return false;
}
if (m_leBranchRatioUnc->text().trimmed().isEmpty()) {
QMessageBox::warning(this, "输入错误", "分支比不确定度不能为空!");
return false;
}
// 数字格式校验(允许带单位)
bool ok;
// 提取数字部分进行校验
QString mevText = m_leRayMev->text().trimmed().replace(QRegExp("[^0-9.]"), "");
mevText.toDouble(&ok);
if (!ok) {
QMessageBox::warning(this, "输入错误", "射线能量必须为有效数字!");
return false;
}
QString mevUncText = m_leRayMevUnc->text().trimmed().replace(QRegExp("[^0-9.]"), "");
mevUncText.toDouble(&ok);
if (!ok) {
QMessageBox::warning(this, "输入错误", "能量不确定度必须为有效数字!");
return false;
}
QString ratioUncText = m_leBranchRatioUnc->text().trimmed().replace(QRegExp("[^0-9.]"), "");
ratioUncText.toDouble(&ok);
if (!ok) {
QMessageBox::warning(this, "输入错误", "分支比不确定度必须为有效数字!");
return false;
}
return true;
}
QStringList NuclideRayDialog::getRayData() const
{
QStringList data;
if (m_isEdit) {
data << m_id; // 编辑模式返回ID
}
data << m_cmbRayType->currentText().trimmed()
<< m_leRayMev->text().trimmed()
<< m_leRayMevUnc->text().trimmed()
<< m_leBranchRatio->text().trimmed()
<< m_leBranchRatioUnc->text().trimmed()
<< m_cmbMainRayIdent->currentText().trimmed()
<< m_leJiahePeak->text().trimmed();
return data;
}