#include "nmNewDlg.h" #include "zxLogInstance.h" #include "ZxResolutionHelper.h" #include "zxSysUtils.h" #include "iParaItemCtrl.h" #include "iParameterUtils.h" #include "iGridRowItem.h" #include "iGridRowUtils.h" #include "nmData/nmDataLogFile.h" nmNewDlg::nmNewDlg(QWidget *parent) : iDlgBase(parent) { m_mainLayout = NULL; m_listParas.clear(); setWindowTitle(tr("New Analyze 123")); nmDataLogFile::getInstance()->writeLog("create nmNewDlg"); } nmNewDlg::~nmNewDlg() { } void nmNewDlg::initUI() { nmDataLogFile::getInstance()->writeLog("initUI nmNewDlg"); m_mainLayout = new QVBoxLayout(); Q_ASSERT (NULL != m_mainLayout); m_mainLayout->setSpacing(0); m_mainLayout->setMargin(0); m_mainLayout->setSizeConstraint(QVBoxLayout::SetMinAndMaxSize); //以ScrollArea来显示,出现滚动条 { QWidget* pWxBk = new QWidget(); Q_ASSERT (NULL != pWxBk); pWxBk->setContextMenuPolicy(Qt::CustomContextMenu); pWxBk->setAutoFillBackground(true); pWxBk->setLayout(m_mainLayout); // Area,设置Widget QScrollArea* pArea = new QScrollArea(); pArea->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); pArea->setWidgetResizable(true); pArea->setWidget(pWxBk); pArea->setContextMenuPolicy(Qt::CustomContextMenu);//*/ // Layout, 设置Area。 QVBoxLayout* pLayoutBk = new QVBoxLayout(); pLayoutBk->setSpacing(0); pLayoutBk->setMargin(0); pLayoutBk->addWidget(pArea); setLayout(pLayoutBk); } this->renderComponents(); } void nmNewDlg::renderComponents() { // TODO,渲染新建分析需要的组件 QFormLayout* fLayout = new QFormLayout; // 创建标签和输入框 // Job名称 QLabel *nameLabel = new QLabel("Job name:"); QLineEdit *nameEdit = new QLineEdit(); // 相态选择 QLabel *phaseLabel = new QLabel("Phase selection:"); // 创建三个三态复选框 QHBoxLayout *phaseLayout = new QHBoxLayout; QCheckBox *checkboxWater = new QCheckBox("Water"); QCheckBox *checkboxOil = new QCheckBox("Oil"); QCheckBox *checkboxGas = new QCheckBox("Gas"); phaseLayout->addWidget(checkboxWater); phaseLayout->addWidget(checkboxOil); phaseLayout->addWidget(checkboxGas); // 将标签和输入框添加到表单布局中 fLayout->addRow(nameLabel, nameEdit); fLayout->addRow(phaseLabel, phaseLayout); // 添加到主框架上 m_mainLayout->addItem(fLayout); nmDataLogFile::getInstance()->writeLog("renderComponents nmNewDlg!!!"); } void nmNewDlg::refreshUIs(QStringList &listParas, bool bReserveOlds) { nmDataLogFile::getInstance()->writeLog("refreshUIs nmNewDlg!!!"); if (NULL == m_mainLayout) { return; } nmDataLogFile::getInstance()->writeLog("refreshUIs nmNewDlg"); m_listParas = listParas; // 备份原有的参数内容 QMap mapOldParas; mapOldParas.clear(); if (bReserveOlds) { backupOldParas(mapOldParas, listParas); } // Clear Old QVBoxLayout* pLayout = m_mainLayout; clearLayout(pLayout); // 创建 m_pGridItemUtils = new iGridRowUtils(); Q_ASSERT (NULL != m_pGridItemUtils); m_pGridItemUtils->setParent(this); connect(m_pGridItemUtils, SIGNAL(sigHelpMsg(QString&)), \ this, SLOT(slotHelpMsg(QString&))); m_mainLayout->addWidget(m_pGridItemUtils); \ QStringList list1 = listParas;//TODO 这是为了其他接口用的,此处暂未使用 m_pGridItemUtils->buildRowUtils(listParas, list1, false, this); // 恢复原有的参数内容 if (bReserveOlds && !mapOldParas.isEmpty()) { restoreOldParas(mapOldParas); } } void nmNewDlg::backupOldParas(QMap &map, QStringList &listParas) { map.clear(); if (NULL != m_pGridItemUtils) { foreach (QString s, listParas) { map[s] = m_pGridItemUtils->getItemValueByPara(s); } } } void nmNewDlg::restoreOldParas(QMap &map) { if (NULL == m_pGridItemUtils) { return; } // 恢复先前备份的数据 QMap::iterator iter = map.begin(); for (; iter != map.end(); iter++) { QString sPara = iter.key(); iParameter* p = iParameterUtils::getPara(sPara); if (NULL == p || p->m_bReadonly) { continue; } QVariant o = iter.value(); if (!o.isValid()) { continue; } m_pGridItemUtils->setParaValue(sPara, o); } } bool nmNewDlg::setParaValue(QString sPara, QVariant o) { if (NULL != m_pGridItemUtils) { if (m_pGridItemUtils->setParaValue(sPara, o)) { return true; } } return false; } bool nmNewDlg::getParaValue(QString sPara, QVariant &o) { if (NULL != m_pGridItemUtils) { if (m_pGridItemUtils->getParaValue(sPara, o)) { return true; } } return false; } bool nmNewDlg::getAllParaValues(QMap &map, bool bOnlyFitted, bool bClearMap) { if (bClearMap) { map.clear(); } if (NULL != m_pGridItemUtils) { if (!m_pGridItemUtils->getAllParaValues(map, bOnlyFitted, false)) { return false; } } return true; } bool nmNewDlg::getAllParaUnits(QMap &map, bool bOnlyFitted, bool bClearMap) { if (NULL != m_pGridItemUtils && \ !m_pGridItemUtils->getAllParaUnits(map, bOnlyFitted, false)) { return false; } return true; } void nmNewDlg::onSerialize(ZxSerializer *ser) { nmDataLogFile::getInstance()->writeLog("onSerialize nmNewDlg!!!"); iDlgBase::onSerialize(ser); ser->write("ParaLists", m_listParas); if (NULL != m_pGridItemUtils) { m_pGridItemUtils->onSerialize(ser); } } void nmNewDlg::onDeserialize(ZxSerializer *ser) { nmDataLogFile::getInstance()->writeLog("onDeserialize nmNewDlg"); iDlgBase::onDeserialize(ser); // 参数反序列化后,重新渲染 m_bUnableSP = true; m_listParas.clear(); ser->read("ParaLists", m_listParas); refreshUIs(m_listParas); if (NULL != m_pGridItemUtils) { m_pGridItemUtils->onDeserialize(ser); } m_bUnableSP = false; } void nmNewDlg::slotHelpMsg(QString &s) { } void nmNewDlg::paintEvent(QPaintEvent *e) { nmDataLogFile::getInstance()->writeLog("paintEvent nmNewDlg"); iDlgBase::paintEvent(e); }