You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Src/nmNum/nmSubWxs/nmWxChangeAnal.cpp

137 lines
4.7 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "nmWxChangeAnal.h"
#include "iSubWndFitting.h"
#include "nmDataAnalyzeManager.h"
#include "nmSubWxsAnalyzeContext.h"
#include "nmSubWxsAnalyzeContextProvider.h"
// 构造函数实现
nmWxChangeAnal::nmWxChangeAnal(QWidget *parent, ZxMainWindow* pMainWindow)
: QDialog(parent) // 初始化基类
, m_pMainWindow(pMainWindow) // 初始化主窗口指针
, m_pAnalysisLabel(nullptr) // 初始化标签指针
, m_pAnalysisComboBox(nullptr) // 初始化下拉框指针
, m_pConfirmButton(nullptr) // 初始化确认按钮指针
, m_pCancelButton(nullptr) // 初始化取消按钮指针
{
// 设置对话框标题
this->setWindowTitle(tr("AnalChange"));
// 设置窗口大小
this->setFixedSize(400, 200);
// 初始化UI界面
this->setupUI();
// 连接信号槽:
// 当下拉框选项改变时触发analysisChanged信号
connect(m_pAnalysisComboBox, SIGNAL(currentTextChanged(QString)),
this, SIGNAL(analysisChanged(QString)));
// 连接按钮点击信号到对应的槽函数
connect(m_pConfirmButton, SIGNAL(clicked()), this, SLOT(onConfirmButtonClicked()));
connect(m_pCancelButton, SIGNAL(clicked()), this, SLOT(onCancelButtonClicked()));
}
// 初始化UI界面
void nmWxChangeAnal::setupUI()
{
// 1. 创建UI控件
m_pAnalysisLabel = new QLabel("Analysis", this); // 创建分析标签
m_pAnalysisComboBox = new QComboBox(this); // 创建下拉选择框
// 遍历主窗口下的所有的流动段分析名称
ZxMainWindow* pMainWnd1 = const_cast<ZxMainWindow*>(m_pMainWindow);
if (nullptr != pMainWnd1)
{
ZxTabWidget* pTabWx = pMainWnd1->getCurTabWx();
QVector<iSubWnd*> vecSubWnds = pMainWnd1->getAllSubWndsOf(pTabWx);
foreach (iSubWnd* pSub, vecSubWnds)
{
iSubWndFitting* pSubWndF = dynamic_cast<iSubWndFitting*>(pSub);
// 分析窗口存在,并且有对应的数据中心已经初始化了边界、井等相关信息
if (nullptr != pSubWndF && nmDataAnalyzeManager::findManagerByFitting(pSubWndF) != nullptr)
{
// 添加项并绑定指针
int index = m_pAnalysisComboBox->count();
m_pAnalysisComboBox->addItem(pSubWndF->windowTitle());
m_pAnalysisComboBox->setItemData(index, QVariant::fromValue<void*>(pSubWndF));
// 如果是当前分析项,设为选中
if (pSubWndF == nmDataAnalyzeManager::getCurrentFitting())
{
m_pAnalysisComboBox->setCurrentIndex(index);
}
}
}
}
m_pConfirmButton = new QPushButton(tr("OK"), this);
m_pCancelButton = new QPushButton(tr("Cancel"), this);
// 2. 布局设置 - 修改后的布局
QVBoxLayout *mainLayout = new QVBoxLayout(this);
// 中心部件布局 - 使用网格布局实现居中效果
QGridLayout *centerLayout = new QGridLayout();
centerLayout->setColumnStretch(0, 1); // 第一列伸缩
centerLayout->addWidget(m_pAnalysisLabel, 0, 1, Qt::AlignRight); // 标签右对齐
centerLayout->addWidget(m_pAnalysisComboBox, 0, 2); // 下拉框
centerLayout->setColumnStretch(3, 1); // 最后一列伸缩
// 设置下拉框的最小宽度
m_pAnalysisComboBox->setMinimumWidth(200);
// 按钮布局
QHBoxLayout *buttonLayout = new QHBoxLayout();
buttonLayout->addStretch(); // 左侧伸缩
buttonLayout->addWidget(m_pConfirmButton);
buttonLayout->addWidget(m_pCancelButton);
// 将布局添加到主布局
mainLayout->addStretch(1); // 顶部伸缩
mainLayout->addLayout(centerLayout);
mainLayout->addStretch(1); // 中间伸缩
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
}
// 确认按钮点击处理
void nmWxChangeAnal::onConfirmButtonClicked()
{
// 获取当前选中项的索引
int index = m_pAnalysisComboBox->currentIndex();
if (index >= 0)
{
// 通过索引获取关联的指针
QVariant data = m_pAnalysisComboBox->itemData(index);
if (data.isValid() && data.canConvert<void*>())
{
iSubWndFitting* pCurSubWndF = static_cast<iSubWndFitting*>(data.value<void*>());
// 切换了分析,则处理
if (pCurSubWndF != nmDataAnalyzeManager::getCurrentFitting())
{
// 创建/获取数据中心类
nmDataAnalyzeManager::getInstanceByFitting(pCurSubWndF);
// 设置当前操作的分析
nmDataAnalyzeManager::setCurrentFitting(pCurSubWndF);
//// 遍历主窗口下的所有的流动段分析名称
ZxMainWindow* pMainWnd1 = const_cast<ZxMainWindow*>(m_pMainWindow);
nmSubWxsAnalyzeContextProvider* pProvider = nmSubWxsAnalyzeContext::provider();
if (nullptr != pProvider) {
pProvider->updateWindowsForCurrentAnalyze(pMainWnd1, pCurSubWndF);
}
}
}
}
this->accept(); // 接受对话框
}
// 取消按钮点击处理
void nmWxChangeAnal::onCancelButtonClicked()
{
this->reject(); // 拒绝对话框
}