#include "InitialWidget.h" #include "ui_InitialWidget.h" #include "InitialCreatePatchDialog.h" #include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h" #include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h" #include "FITK_Kernel/FITKEasyParam/FITKWidgetComLine.h" #include "FITK_Kernel/FITKEasyParam/FITKWidgetVBox.h" #include "FITK_Kernel/FITKEasyParam/FITKParamString.h" #include "FITK_Component/FITKWidget/FITKTabWidget.h" #include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoCommand.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKOFInitialConditions.h" #include "FITK_Interface/FITKInterfaceFlowOF/FITKOFPhysicsData.h" #include "FITK_Kernel/FITKEasyParam/FITKParameter.h" #include "FITK_Kernel/FITKEasyParam/FITKParamString.h" #include namespace GUI { InitialWidget::InitialWidget(EventOper::ParaWidgetInterfaceOperator * oper, QWidget * parent) : GUICalculateWidgetBase(oper, parent) { _ui = new Ui::InitialWidget(); _ui->setupUi(this); init(); } InitialWidget::~InitialWidget() { if (_ui) { delete _ui; _ui = nullptr; } } void InitialWidget::init() { if (_physicsData == nullptr)return; _initValue = _physicsData->getInitialConditions(); updateWidget(); } void InitialWidget::updateWidget() { updateBasicWidget(); updatePatchWidget(); } void InitialWidget::on_pushButton_PatchAdd_clicked() { InitialCreatePatchDialog dialog(this); dialog.exec(); updatePatchWidget(); } void InitialWidget::updateBasicWidget() { if (_initValue == nullptr)return; auto basicValue = _initValue->getBasicData(); if (basicValue == nullptr)return; //清除全部子界面 QLayoutItem* item; while ((item = _ui->verticalLayout_Basic->takeAt(0)) != nullptr) { if (QWidget* widget = item->widget()) { widget->deleteLater(); // 推荐使用 deleteLater,以确保小部件在适当时机被删除 } delete item; // 删除布局项 } for (auto v : basicValue->getParameter()) { if (v == nullptr)continue; QWidget* widget = new Core::FITKWidgetComLine(v, this); _ui->verticalLayout_Basic->addWidget(widget); } } void InitialWidget::updatePatchWidget() { if (_initValue == nullptr)return; //清除全部子界面 QLayoutItem* item; while ((item = _ui->verticalLayout_Patch->takeAt(0)) != nullptr) { if (QWidget* widget = item->widget()) { widget->deleteLater(); // 推荐使用 deleteLater,以确保小部件在适当时机被删除 } delete item; // 删除布局项 } int patchNum = _initValue->getPatchCount(); Comp::FITKTabWidget* tabWidget = new Comp::FITKTabWidget(Comp::FITKTabWidgetType::FITKTab_Auto, this); for (int i = 0; i < patchNum; i++) { auto pathData = _initValue->getPatch(i); if (pathData == nullptr)continue; if (pathData->getFieldPara() == nullptr)continue; if (pathData->getGeometryModel() == nullptr)continue; Interface::FITKOFSolverInitialEnum::FITKPatchApplyObjectType type = pathData->getAppltTo(); QList widgets = {}; QString applyType = ""; switch (type){ case Interface::FITKOFSolverInitialEnum::Cells:applyType = "Cells"; break; case Interface::FITKOFSolverInitialEnum::Faces:applyType = "Faces"; break; case Interface::FITKOFSolverInitialEnum::Both:applyType = "Both"; break; } Core::FITKParamString titleData; titleData.setDataObjectName("Apply To"); titleData.setValue(applyType); Core::FITKWidgetComLine* titleWidget = new Core::FITKWidgetComLine(&titleData, this); titleWidget->setEnabled(false); widgets.append(titleWidget); for (auto para : pathData->getFieldPara()->getParameter()) { if (para == nullptr)continue; Core::FITKWidgetComLine* w = new Core::FITKWidgetComLine(para, this); widgets.append(w); } QPushButton* removeButton = new QPushButton(this); removeButton->setText("Remove"); removeButton->setProperty("PatchIndex", i); connect(removeButton, &QPushButton::clicked, [=]() { _initValue->removePatch(i); updatePatchWidget(); }); widgets.append(removeButton); Core::FITKWidgetVBox* widget = new Core::FITKWidgetVBox(widgets, this); tabWidget->addTab(widget, pathData->getGeometryModel()->getDataObjectName()); } _ui->verticalLayout_Patch->addWidget(tabWidget); } }