134 lines
5.0 KiB
C++
134 lines
5.0 KiB
C++
#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 ? QStringLiteral(u"编辑射线信息") : QStringLiteral(u"添加射线信息"));
|
||
setFixedSize(450, 300);
|
||
|
||
QFormLayout *formLayout = new QFormLayout(this);
|
||
|
||
// 射线类型下拉框(常用核素射线类型)
|
||
m_cmbRayType = new QComboBox(this);
|
||
m_cmbRayType->addItems({QStringLiteral(u"γ"), QStringLiteral(u"β⁻"), QStringLiteral(u"β⁺"), QStringLiteral(u"α"), QStringLiteral(u"X射线"), QStringLiteral(u"中子"), QStringLiteral(u"电子俘获")});
|
||
formLayout->addRow(QStringLiteral(u"射线类型"), m_cmbRayType);
|
||
|
||
m_leRayMev = new QLineEdit(this);
|
||
m_leRayMev->setPlaceholderText(QStringLiteral(u"例如:1.332 MeV"));
|
||
formLayout->addRow(QStringLiteral(u"射线能量"), m_leRayMev);
|
||
|
||
m_leRayMevUnc = new QLineEdit(this);
|
||
m_leRayMevUnc->setPlaceholderText(QStringLiteral(u"例如:0.001 MeV"));
|
||
formLayout->addRow(QStringLiteral(u"能量不确定度"), m_leRayMevUnc);
|
||
|
||
m_leBranchRatio = new QLineEdit(this);
|
||
m_leBranchRatio->setPlaceholderText(QStringLiteral(u"例如:0.9998"));
|
||
formLayout->addRow("分支比", m_leBranchRatio);
|
||
|
||
m_leBranchRatioUnc = new QLineEdit(this);
|
||
m_leBranchRatioUnc->setPlaceholderText(QStringLiteral(u"例如:0.0001"));
|
||
formLayout->addRow(QStringLiteral(u"分支比不确定度"), m_leBranchRatioUnc);
|
||
|
||
// 主射线标识下拉框
|
||
m_cmbMainRayIdent = new QComboBox(this);
|
||
m_cmbMainRayIdent->addItems({QStringLiteral(u"是"), QStringLiteral(u"否")});
|
||
formLayout->addRow(QStringLiteral(u"是否为主射线"), m_cmbMainRayIdent);
|
||
|
||
m_leJiahePeak = new QLineEdit(this);
|
||
m_leJiahePeak->setPlaceholderText(QStringLiteral(u"无则留空"));
|
||
formLayout->addRow(QStringLiteral(u"加和峰"), 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, QStringLiteral(u"输入错误"), QStringLiteral(u"射线能量不能为空!"));
|
||
return false;
|
||
}
|
||
if (m_leRayMevUnc->text().trimmed().isEmpty()) {
|
||
QMessageBox::warning(this, QStringLiteral(u"输入错误"), QStringLiteral(u"能量不确定度不能为空!"));
|
||
return false;
|
||
}
|
||
if (m_leBranchRatioUnc->text().trimmed().isEmpty()) {
|
||
QMessageBox::warning(this, QStringLiteral(u"输入错误"), QStringLiteral(u"分支比不确定度不能为空!"));
|
||
return false;
|
||
}
|
||
|
||
// 数字格式校验(允许带单位)
|
||
bool ok;
|
||
// 提取数字部分进行校验
|
||
QString mevText = m_leRayMev->text().trimmed().replace(QRegExp("[^0-9.]"), "");
|
||
mevText.toDouble(&ok);
|
||
if (!ok) {
|
||
QMessageBox::warning(this, QStringLiteral(u"输入错误"), QStringLiteral(u"射线能量必须为有效数字!"));
|
||
return false;
|
||
}
|
||
|
||
QString mevUncText = m_leRayMevUnc->text().trimmed().replace(QRegExp("[^0-9.]"), "");
|
||
mevUncText.toDouble(&ok);
|
||
if (!ok) {
|
||
QMessageBox::warning(this, QStringLiteral(u"输入错误"), QStringLiteral(u"能量不确定度必须为有效数字!"));
|
||
return false;
|
||
}
|
||
|
||
QString ratioUncText = m_leBranchRatioUnc->text().trimmed().replace(QRegExp("[^0-9.]"), "");
|
||
ratioUncText.toDouble(&ok);
|
||
if (!ok) {
|
||
QMessageBox::warning(this, QStringLiteral(u"输入错误"), QStringLiteral(u"分支比不确定度必须为有效数字!"));
|
||
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;
|
||
}
|