actionSettingDialog.cpp 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "actionSettingDialog.h"
  2. #include "ui_actionSettingDialog.h"
  3. #include <QPushButton>
  4. #include <QFormLayout>
  5. #include <QComboBox>
  6. #include <QLineEdit>
  7. #include <iostream>
  8. #include <QLabel>
  9. ActionSettingDialog::ActionSettingDialog(QWidget *parent) :
  10. QDialog(parent),
  11. ui(new Ui::ActionSettingDialog)
  12. {
  13. ui->setupUi(this);
  14. ui->buttonBox->button(QDialogButtonBox::Ok)->setText("应用");
  15. ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("放弃");
  16. }
  17. ActionSettingDialog::~ActionSettingDialog()
  18. {
  19. delete ui;
  20. }
  21. void ActionSettingDialog::setDialogUi(QVector<ReadJsonSrc::Fields> fields, QMap<QString, QString> data,QStringList listItems)
  22. {
  23. fieldVec = fields;
  24. QFormLayout* formlayout = new QFormLayout();
  25. for(const auto &i:fields){
  26. if(i.type == "list"){
  27. QComboBox* combo = new QComboBox;
  28. combo->addItems(listItems);
  29. QString val;
  30. if(data.find(i.name) != data.end()) val = data[i.name];
  31. else val = i.defaultVal;
  32. int index = combo->findText(val);
  33. combo->setCurrentIndex(index);
  34. connect(combo,SIGNAL(currentTextChanged(QString)),this,SLOT(onComboBoxTextChanged(QString)));
  35. formlayout->addRow(i.name,combo);
  36. }
  37. else if(i.type == "input"){
  38. QString val;
  39. if(data.find(i.name) != data.end()) val = data[i.name];
  40. else val = i.defaultVal;
  41. QLineEdit* edit = new QLineEdit(val);
  42. connect(edit,SIGNAL(editingFinished()),this,SLOT(onLineEditTextChanged()));
  43. formlayout->addRow(i.name,edit);
  44. }
  45. }
  46. ui->widget->setLayout(formlayout);
  47. }
  48. void ActionSettingDialog::onComboBoxTextChanged(QString arg)
  49. {
  50. QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
  51. QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget->layout());
  52. QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(box));
  53. std::cout<<qPrintable(label->text())<<": "<<qPrintable(arg)<<std::endl;
  54. }
  55. void ActionSettingDialog::onLineEditTextChanged()
  56. {
  57. QLineEdit *edit = dynamic_cast<QLineEdit*>(this->sender());
  58. QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget->layout());
  59. QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(edit));
  60. std::cout<<qPrintable(label->text())<<": "<<qPrintable(edit->text())<<std::endl;
  61. }
  62. //点击应用,保存数据
  63. void ActionSettingDialog::on_buttonBox_accepted()
  64. {
  65. QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget->layout());
  66. int itemCout = formlayout->count();
  67. for(int itemIndex=1;itemIndex<itemCout;itemIndex+=2){
  68. QLayoutItem* item = formlayout->itemAt(itemIndex);
  69. int i = itemIndex/2;
  70. if(fieldVec[i].type == "list"){
  71. QComboBox* combo = dynamic_cast<QComboBox*>(item->widget());
  72. dataMap[fieldVec[i].name] = combo->currentText();
  73. std::cout<<qPrintable(fieldVec[i].name)<<": "<<qPrintable(combo->currentText())<<std::endl;
  74. }
  75. else if(fieldVec[i].type == "input"){
  76. QLineEdit* edit = dynamic_cast<QLineEdit*>(item->widget());
  77. dataMap[fieldVec[i].name] = edit->text();
  78. std::cout<<qPrintable(fieldVec[i].name)<<": "<<qPrintable(edit->text())<<std::endl;
  79. }
  80. }
  81. }