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.
AppFlow/GUIDialog/GUICalculateDialog/CompSelectComBoxWidget.cpp

126 lines
3.5 KiB
C++

#include "CompSelectComBoxWidget.h"
#include "ui_CompSelectComBoxWidget.h"
#include "FITK_Kernel/FITKEasyParam/FITKWidgetComLine.h"
#include "FITK_Kernel/FITKEasyParam/FITKParameter.h"
namespace GUI
{
CompSelectComBoxWidget::CompSelectComBoxWidget(QString type, QWidget * parent):
QWidget(parent), _type(type)
{
_ui = new Ui::CompSelectComBoxWidget();
_ui->setupUi(this);
init();
}
CompSelectComBoxWidget::~CompSelectComBoxWidget()
{
if (_ui)delete _ui;
}
void CompSelectComBoxWidget::init()
{
_ui->widget_Sub->show();
_ui->label_Name->setText(_type);
_ui->pushButton->setCheckable(true);
_ui->pushButton->setChecked(true);
}
void CompSelectComBoxWidget::update()
{
if (_myFunction == nullptr)return;
QString currentOption = _ui->comboBox->currentText();
if (currentOption.isEmpty())return;
Core::FITKParameter* subData = _myFunction(currentOption, this);
if (subData == nullptr)return;
//清除全部子界面
QLayoutItem* item;
while ((item = _ui->verticalLayout_Sub->takeAt(0)) != nullptr) {
if (QWidget* widget = item->widget()) {
widget->deleteLater(); // 推荐使用 deleteLater以确保小部件在适当时机被删除
}
delete item; // 删除布局项
}
for (auto data : subData->getParameter()) {
if (data == nullptr)continue;
QWidget* w = new Core::FITKWidgetComLine(data, this);
if (w == nullptr)continue;
_ui->verticalLayout_Sub->addWidget(w);
}
}
void CompSelectComBoxWidget::setFunction(getSubDataFormText function)
{
_myFunction = function;
}
void CompSelectComBoxWidget::setOptions(QStringList Options)
{
_ui->comboBox->blockSignals(true);
_ui->comboBox->clear();
_ui->comboBox->addItems(Options);
_ui->comboBox->setCurrentIndex(0);
_ui->comboBox->blockSignals(false);
}
void CompSelectComBoxWidget::setCurrentText(const QString index)
{
_ui->comboBox->blockSignals(true);
_ui->comboBox->setCurrentText(index);
_ui->comboBox->blockSignals(false);
}
void CompSelectComBoxWidget::setSubWidgetData(Core::FITKParameter* data)
{
if (data == nullptr)return;
//清除全部子界面
QLayoutItem* item;
while ((item = _ui->verticalLayout_Sub->takeAt(0)) != nullptr) {
if (QWidget* widget = item->widget()) {
widget->deleteLater(); // 推荐使用 deleteLater以确保小部件在适当时机被删除
}
delete item; // 删除布局项
}
for (auto d : data->getParameter()) {
if (d == nullptr)continue;
QWidget* w = new Core::FITKWidgetComLine(d, this);
if (w == nullptr)continue;
_ui->verticalLayout_Sub->addWidget(w);
}
}
void CompSelectComBoxWidget::setData(QString name, QVariant data)
{
_data.insert(name, data);
}
QVariant CompSelectComBoxWidget::getData(const QString name)
{
return _data.value(name);
}
void CompSelectComBoxWidget::on_pushButton_clicked()
{
if (_ui->pushButton->isChecked()) {
_ui->widget_Sub->show();
}
else {
_ui->widget_Sub->hide();
}
}
void GUI::CompSelectComBoxWidget::on_comboBox_currentIndexChanged(int index)
{
Q_UNUSED(index);
update();
}
}