#include "actionSettingDialog.h" #include "ui_actionSettingDialog.h" #include #include #include #include #include #include ActionSettingDialog::ActionSettingDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ActionSettingDialog) { ui->setupUi(this); ui->buttonBox->button(QDialogButtonBox::Ok)->setText("应用"); ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("放弃"); } ActionSettingDialog::~ActionSettingDialog() { delete ui; } void ActionSettingDialog::setDialogUi(QVector fields, QMap data,QStringList listItems) { fieldVec = fields; QFormLayout* formlayout = new QFormLayout(); for(const auto &i:fields){ if(i.type == "list"){ QComboBox* combo = new QComboBox; combo->addItems(listItems); QString val; if(data.find(i.name) != data.end()) val = data[i.name]; else val = i.defaultVal; int index = combo->findText(val); combo->setCurrentIndex(index); connect(combo,SIGNAL(currentTextChanged(QString)),this,SLOT(onComboBoxTextChanged(QString))); formlayout->addRow(i.name,combo); } else if(i.type == "input"){ QString val; if(data.find(i.name) != data.end()) val = data[i.name]; else val = i.defaultVal; QLineEdit* edit = new QLineEdit(val); connect(edit,SIGNAL(editingFinished()),this,SLOT(onLineEditTextChanged())); formlayout->addRow(i.name,edit); } } ui->widget->setLayout(formlayout); } void ActionSettingDialog::onComboBoxTextChanged(QString arg) { QComboBox *box = dynamic_cast(this->sender()); QFormLayout* formlayout = dynamic_cast(ui->widget->layout()); QLabel *label = dynamic_cast(formlayout->labelForField(box)); std::cout<text())<<": "<(this->sender()); QFormLayout* formlayout = dynamic_cast(ui->widget->layout()); QLabel *label = dynamic_cast(formlayout->labelForField(edit)); std::cout<text())<<": "<text())<(ui->widget->layout()); int itemCout = formlayout->count(); for(int itemIndex=1;itemIndexitemAt(itemIndex); int i = itemIndex/2; if(fieldVec[i].type == "list"){ QComboBox* combo = dynamic_cast(item->widget()); dataMap[fieldVec[i].name] = combo->currentText(); std::cout<currentText())<(item->widget()); dataMap[fieldVec[i].name] = edit->text(); std::cout<text())<