123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- #include "MatterElementConfigWidget.h"
- #include "MatterElementItemDelegate.h"
- #include "ui_MatterElementConfigWidget.h"
- #include "CMind.h"
- #include <QLineEdit>
- // #include <QDebug>
- MatterElementConfigWidget::MatterElementConfigWidget(CMind *mind, int domainLevel, QWidget *parent)
- : QWidget(parent), ui(new Ui::MatterElementConfigWidget), m_domainLevel(domainLevel), m_mind(mind)
- {
- ui->setupUi(this);
- initScaleDivisionTable();
- initConfigItems();
- initDomainTable();
- }
- MatterElementConfigWidget::~MatterElementConfigWidget()
- {
- delete ui;
- }
- void MatterElementConfigWidget::initScaleDivisionTable()
- {
- QTableView *t = ui->scaleDivisionTable;
- t->setAlternatingRowColors(false);
- t->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
- t->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(244,244,244);color: black;}");
- t->verticalHeader()->setStyleSheet("QHeaderView::section{background:rgb(244,244,244);color: black;}");
- t->verticalHeader()->setDefaultAlignment(Qt::AlignCenter);
- t->setSelectionMode(QAbstractItemView::SingleSelection);
- t->verticalHeader()->hide();
- m_scaleDivisionmodel = new QStandardItemModel;
- t->setModel(m_scaleDivisionmodel);
- m_scaleDivisionmodel->setRowCount(1);
- m_scaleDivisionmodel->setColumnCount(7);
- const QStringList headers = { "定义", "很差", "较差", "一般", "较高", "很高", "相邻定义" };
- m_scaleDivisionmodel->setHorizontalHeaderLabels(headers);
- QStandardItem *s = nullptr;
- MatterElementItemSpinDelegate *sd = new MatterElementItemSpinDelegate(t);
- const QStringList originValues = { "1.0", "3.0", "5.0", "7.0", "9.0", "[2.0, 4.0, 6.0, 8.0]" };
- for (int i = 0; i < headers.size(); ++i) {
- if (i == 0) {
- s = new QStandardItem("标度");
- s->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
- s->setTextAlignment(Qt::AlignCenter);
- } else {
- s = new QStandardItem(originValues.at(i - 1));
- s->setTextAlignment(Qt::AlignCenter);
- }
- m_scaleDivisionmodel->setItem(0, i, s);
- if (i > 0 && i < headers.size() - 1) {
- t->setItemDelegateForColumn(i, sd);
- }
- if (i == headers.size() - 1) {
- t->setItemDelegateForColumn(i, new MatterElementItemInsideDelegate);
- }
- }
- connect(ui->updateScaleBtn, &QPushButton::clicked, this, &MatterElementConfigWidget::onScaleValueUpdate);
- }
- static void clearTab(QTabWidget *tabWidget)
- {
- while (tabWidget->count() > 0) {
- auto widget = tabWidget->widget(0); // 获取当前页对应的widget
- tabWidget->removeTab(0); // 从QTabWidget中删除当前页
- widget->setParent(nullptr); // 从父控件中删除widget对象
- widget->deleteLater(); // 删除widget对象
- }
- }
- void MatterElementConfigWidget::initDomainLevelLayout()
- {
- ui->levelLabel->setText(QString::number(m_domainLevel));
- QFormLayout *formLayout = new QFormLayout;
- for (int l = 0; l < m_domainLevel; ++l) {
- auto le = new QLineEdit(QString("E%1").arg(l + 1));
- le->setMinimumHeight(30);
- le->setMaximumWidth(80);
- m_levelEdits << le;
- formLayout->addRow(QString("%1级:").arg(l + 1), le);
- }
- auto levelSaveBtn = new QPushButton("保存");
- levelSaveBtn->setIcon(QIcon(":/qfluentwidgets/images/icons/Save_black.svg"));
- levelSaveBtn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
- levelSaveBtn->setMinimumHeight(30);
- levelSaveBtn->setMaximumWidth(80);
- formLayout->addRow("", levelSaveBtn);
- ui->levelWidget->setLayout(formLayout);
- connect(levelSaveBtn, &QPushButton::clicked, this, &MatterElementConfigWidget::onLevelSaveBtnClick);
- }
- void MatterElementConfigWidget::initConfigItems()
- {
- // 脑图层级 < 2 时无效
- if (m_mind->levels() < 2) {
- return;
- }
- m_allConfigItems.clear();
- // 使用倒数第二层节点及其子节点
- for (CNodeData n : m_mind->nodesInLevel(m_mind->levels() - 1)) {
- QVector<MEDomain> children;
- for (CNodeData sub : m_mind->subNodes(n)) {
- MEDomain d;
- d.name = sub.name;
- children.append(d);
- }
- MEConfigItem i;
- i.parentName = n.name;
- i.childs = children;
- m_allConfigItems.append(i);
- }
- }
- void MatterElementConfigWidget::initDomainTable()
- {
- initDomainLevelLayout();
- QStringList parentIndexs;
- QHash<QString, QStringList> indexs;
- for (const auto &item : m_allConfigItems) {
- parentIndexs << item.parentName;
- indexs.insert(item.parentName, {});
- for (const auto &child : item.childs) {
- indexs[item.parentName] << child.name;
- }
- }
- m_meRangeDelegate = new MatterElementItemRangeDelegate(this);
- const QStringList rangeItems = { "很差", "较差", "一般", "较高", "很高",
- "相邻较差", "相邻一般", "相邻较高", "相邻很高" };
- QVector<double> rangeValues;
- auto scaleValues = getScaleValues();
- rangeValues << scaleValues.at(0) << scaleValues.at(1);
- m_meRangeDelegate->setOriginItems(rangeItems, rangeValues);
- QStringList domainLevels = getDomainLevels();
- for (int pindex = 0; pindex < parentIndexs.size(); ++pindex) {
- QTableView *table = new QTableView;
- table->setAlternatingRowColors(false);
- table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
- table->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(244,244,244);color: black;}");
- table->verticalHeader()->setStyleSheet("QHeaderView::section{background:rgb(244,244,244);color: black;}");
- table->verticalHeader()->setDefaultAlignment(Qt::AlignCenter);
- table->setSelectionMode(QAbstractItemView::SingleSelection);
- table->verticalHeader()->hide();
- table->verticalHeader()->setDefaultSectionSize(60);
- table->horizontalHeader()->hide();
- QStandardItemModel *tModel = new QStandardItemModel;
- m_domainModels << tModel;
- table->setModel(tModel);
- int indexNumber = indexs[parentIndexs.at(pindex)].size();
- tModel->setColumnCount(4 * domainLevels.size());
- tModel->setRowCount(indexNumber);
- for (int r = 0; r < domainLevels.size() + 1; ++r) {
- QStandardItem *s = nullptr;
- if (r < domainLevels.size()) {
- s = new QStandardItem(QString("R%1").arg(r + 1));
- } else {
- s = new QStandardItem("Rp");
- }
- s->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
- s->setTextAlignment(Qt::AlignCenter);
- if (r < domainLevels.size()) {
- s->setToolTip(QString("经典域R%1").arg(r + 1));
- } else {
- s->setToolTip("节域p");
- }
- tModel->setItem(0, r * 4, s);
- table->setColumnWidth(r * 4, 20);
- table->setSpan(0, r * 4, indexNumber, 1);
- if (r < domainLevels.size()) {
- s = new QStandardItem(domainLevels.at(r));
- } else {
- s = new QStandardItem("节域p");
- }
- s->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
- s->setTextAlignment(Qt::AlignCenter);
- tModel->setItem(0, r * 4 + 1, s);
- table->setSpan(0, r * 4 + 1, indexNumber, 1);
- for (int k = 0; k < indexNumber; ++k) {
- s = new QStandardItem(indexs[parentIndexs.at(pindex)].value(k));
- s->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
- s->setTextAlignment(Qt::AlignCenter);
- tModel->setItem(k, r * 4 + 2, s);
- s = new QStandardItem();
- s->setTextAlignment(Qt::AlignCenter);
- tModel->setItem(k, r * 4 + 3, s);
- }
- table->setItemDelegateForColumn(r * 4 + 3, m_meRangeDelegate);
- }
- ui->tabWidget->addTab(table, parentIndexs.at(pindex));
- }
- }
- QStringList MatterElementConfigWidget::getDomainLevels() const
- {
- QStringList lvls;
- for (int i = 0; i < m_levelEdits.size(); ++i) {
- QString v = m_levelEdits.at(i)->text().trimmed();
- if (v.isEmpty()) {
- lvls << QString("E%1").arg(i + 1);
- } else {
- lvls << v;
- }
- }
- return lvls;
- }
- QVector<QVector<double>> MatterElementConfigWidget::getScaleValues() const
- {
- QVector<QVector<double>> newValues(2);
- for (int c = 1; c < m_scaleDivisionmodel->columnCount() - 1; ++c) {
- newValues[0] << m_scaleDivisionmodel->item(0, c)->text().toDouble();
- }
- QString value = m_scaleDivisionmodel->item(0, m_scaleDivisionmodel->columnCount() - 1)->text();
- QStringList tmp = value.mid(1, value.size() - 2).replace(" ", "").split(",");
- for (const auto &var : tmp) {
- newValues[1] << var.toDouble();
- }
- return newValues;
- }
- void MatterElementConfigWidget::onLevelSaveBtnClick()
- {
- QStringList domainLevels = getDomainLevels();
- for (auto model : m_domainModels) {
- for (int c = 0; c < domainLevels.size(); ++c) {
- model->item(0, c * 4 + 1)->setText(domainLevels.at(c));
- }
- }
- }
- void MatterElementConfigWidget::onScaleValueUpdate()
- {
- ui->scaleDivisionTable->clearSelection();
- QVector<double> rangeValues;
- auto scaleValues = getScaleValues();
- rangeValues << scaleValues.at(0) << scaleValues.at(1);
- m_meRangeDelegate->updateOriginValues(rangeValues);
- }
- QList<MEConfigItem> MatterElementConfigWidget::getAllConfigItems() const
- {
- return m_allConfigItems;
- }
|