EXDataViewDelegate.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "EXDataViewDelegate.h"
  2. #include <QHBoxLayout>
  3. #include <QLabel>
  4. #include <QPushButton>
  5. #include <QButtonGroup>
  6. #include <QDebug>
  7. #include <QComboBox>
  8. SchemeBar::SchemeBar(const QString &lLabel, const QString &rLabel, const QStringList &vlist, QWidget *parent)
  9. : QDialog(parent), leftLabel(lLabel), rightLabel(rLabel), barValueList(vlist)
  10. {
  11. setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint);
  12. QHBoxLayout *hlay = new QHBoxLayout;
  13. QLabel *l = new QLabel(leftLabel.trimmed());
  14. QLabel *r = new QLabel(rightLabel.trimmed());
  15. QHBoxLayout *centerLay = new QHBoxLayout;
  16. QButtonGroup *btnGroup = new QButtonGroup(this);
  17. for (QString &v : barValueList) {
  18. QPushButton *btn = new QPushButton(v);
  19. btn->setMaximumWidth(30);
  20. centerLay->addWidget(btn);
  21. btnGroup->addButton(btn);
  22. if (v.startsWith("1/")) {
  23. btn->setText(v.split("/")[1]);
  24. } else {
  25. btn->setText(v);
  26. }
  27. btn->setProperty("number", v);
  28. }
  29. connect(btnGroup, static_cast<void (QButtonGroup::*)(QAbstractButton *)>(&QButtonGroup::buttonClicked), this,
  30. &SchemeBar::barClicked);
  31. hlay->addWidget(l);
  32. hlay->addLayout(centerLay);
  33. hlay->addWidget(r);
  34. setLayout(hlay);
  35. }
  36. void SchemeBar::barClicked(QAbstractButton *btn)
  37. {
  38. emit setValue(btn->property("number").toString());
  39. this->close();
  40. }
  41. EXDataTableComboDelegate::EXDataTableComboDelegate(QObject *parent) : QStyledItemDelegate(parent) { }
  42. QWidget *EXDataTableComboDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem & /* option */,
  43. const QModelIndex & /* index */) const
  44. {
  45. QComboBox *w = new QComboBox(parent);
  46. w->addItems({ "9", "5", "4", "3", "1" });
  47. return w;
  48. }
  49. void EXDataTableComboDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
  50. {
  51. QString value = index.model()->data(index, Qt::EditRole).toString();
  52. QComboBox *comboBox = static_cast<QComboBox *>(editor);
  53. comboBox->setCurrentText(value);
  54. }
  55. void EXDataTableComboDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
  56. {
  57. QComboBox *spinBox = static_cast<QComboBox *>(editor);
  58. QString value = spinBox->currentText();
  59. model->setData(index, value, Qt::EditRole);
  60. }
  61. void EXDataTableComboDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
  62. const QModelIndex & /*index*/) const
  63. {
  64. editor->setGeometry(option.rect);
  65. }