|
@@ -26,6 +26,19 @@
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
+static const char *kTabName = "tabName";
|
|
|
+
|
|
|
+EXDataItemModel::EXDataItemModel(QObject *parent) : QStandardItemModel(parent) { }
|
|
|
+
|
|
|
+QVariant EXDataItemModel::data(const QModelIndex &index, int role) const
|
|
|
+{
|
|
|
+ QVariant value = QStandardItemModel::data(index, role);
|
|
|
+ if (Qt::TextAlignmentRole == role) {
|
|
|
+ value = Qt::AlignCenter;
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+}
|
|
|
+
|
|
|
EXDataTableView::EXDataTableView(SchemePlanManager::SchemeProcessInfo process, QWidget *parent)
|
|
|
: QWidget(parent), m_process(process)
|
|
|
{
|
|
@@ -87,45 +100,104 @@ void EXDataTableView::connectSignalsAndSlots()
|
|
|
connect(m_save, &PushButton::clicked, this, &EXDataTableView::slotSave);
|
|
|
}
|
|
|
|
|
|
+void EXDataTableView::setupModels()
|
|
|
+{
|
|
|
+ // 按照脑图层级创建各个表的 models
|
|
|
+ m_models.clear();
|
|
|
+ QList<CNodeData> hHeaders;
|
|
|
+ QList<CNodeData> vHeaders;
|
|
|
+
|
|
|
+ for (int i = 1; i < m_mind1->levels(); i++) {
|
|
|
+ QList<EXDataItemModel *> modelList;
|
|
|
+
|
|
|
+ // 方案优选和综合效能的评估数据采集页面只有一级, 不用切换页面
|
|
|
+ if (m_process.type == SchemePlanManager::ImportEvalData
|
|
|
+ && (m_process.indexType == ProjectManager::OptimalIndex
|
|
|
+ || m_process.indexType == ProjectManager::EfficiencyIndex)) {
|
|
|
+ vHeaders = m_mind1->leaves();
|
|
|
+ EXDataItemModel *model = new EXDataItemModel(this);
|
|
|
+ updateModel(model, hHeaders, vHeaders);
|
|
|
+ modelList.append(model);
|
|
|
+ m_models[i] = modelList;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ QList<CNodeData> nodes = m_mind1->nodesInLevel(i);
|
|
|
+ for (int j = 0; j < nodes.count(); j++) {
|
|
|
+ CNodeData node = nodes[j];
|
|
|
+ EXDataItemModel *model = new EXDataItemModel(this);
|
|
|
+
|
|
|
+ if (m_process.type == SchemePlanManager::ImportWeightData) {
|
|
|
+ hHeaders = m_mind1->subNodes(node);
|
|
|
+ vHeaders = hHeaders;
|
|
|
+ for (int i = 0; i < vHeaders.count(); i++) {
|
|
|
+ CNodeData vNode = vHeaders[i];
|
|
|
+ for (int j = 0; j < hHeaders.count(); j++) {
|
|
|
+ CNodeData hNode = hHeaders[j];
|
|
|
+ QStandardItem *item = new QStandardItem();
|
|
|
+ item->setData(Qt::AlignCenter, Qt::TextAlignmentRole);
|
|
|
+ item->setEditable(false);
|
|
|
+ if (i == j) {
|
|
|
+ item->setText("1");
|
|
|
+ }
|
|
|
+ if (i >= j) {
|
|
|
+ item->setBackground(QBrush(QColor("lightgray")));
|
|
|
+ }
|
|
|
+ model->setItem(i, j, item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_process.type == SchemePlanManager::ImportEvalData) {
|
|
|
+ if (m_process.indexType == ProjectManager::TechIndex) {
|
|
|
+ hHeaders = m_mind1->subNodes(node);
|
|
|
+ vHeaders = m_mind2->leaves();
|
|
|
+ for (int i = 0; i < vHeaders.count(); i++) {
|
|
|
+ CNodeData vNode = vHeaders[i];
|
|
|
+ for (int j = 0; j < hHeaders.count(); j++) {
|
|
|
+ CNodeData hNode = hHeaders[j];
|
|
|
+ QStandardItem *item = new QStandardItem();
|
|
|
+ item->setText("0");
|
|
|
+ model->setItem(i, j, item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ model->setProperty(kTabName, node.name);
|
|
|
+ updateModel(model, hHeaders, vHeaders);
|
|
|
+ modelList.append(model);
|
|
|
+ }
|
|
|
+ m_models[i] = modelList;
|
|
|
+ }
|
|
|
+
|
|
|
+ setCurrentPage(1);
|
|
|
+}
|
|
|
+
|
|
|
void EXDataTableView::setupTabWidget()
|
|
|
{
|
|
|
- /// 创建 tableView 并添加进 tabWidget
|
|
|
- /// 这个过程中会触发 tabWidget 的 currentChanged,
|
|
|
- /// 所以使用 m_isSettingTable 标记此过程, 以采取必要措施来规避一些异常操作
|
|
|
- m_isSettingTable = true;
|
|
|
m_dataTab->clear();
|
|
|
|
|
|
- QList<CNodeData> nodeList = m_mind1->nodesInLevel(m_currentPage);
|
|
|
-
|
|
|
- for (int i = 0; i < nodeList.count(); i++) {
|
|
|
- CNodeData n = nodeList[i];
|
|
|
- QTableView *t = new QTableView(m_dataTab);
|
|
|
+ QList<EXDataItemModel *> list = m_models[m_currentPage];
|
|
|
+ for (int j = 0; j < list.size(); j++) {
|
|
|
+ EXDataItemModel *model = list[j];
|
|
|
+ QTableView *t = new QTableView(m_dataTab);
|
|
|
t->setAlternatingRowColors(m_mind2->nodeList().count() > 0);
|
|
|
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);
|
|
|
-
|
|
|
- m_dataTab->addTab(t, n.name);
|
|
|
-
|
|
|
- QList<QStandardItemModel *> modelList;
|
|
|
- if (m_models.keys().contains(m_currentPage)) {
|
|
|
- modelList = m_models[m_currentPage];
|
|
|
- }
|
|
|
- QStandardItemModel *model;
|
|
|
- if (modelList.count() <= i) {
|
|
|
- model = new QStandardItemModel(t);
|
|
|
- modelList.append(model);
|
|
|
- } else {
|
|
|
- model = modelList[i];
|
|
|
- }
|
|
|
- m_models[m_currentPage] = modelList;
|
|
|
-
|
|
|
t->setModel(model);
|
|
|
+ m_dataTab->addTab(t, model->property(kTabName).toString());
|
|
|
connect(t, &QTableView::clicked, this, &EXDataTableView::slotItemClicked);
|
|
|
+
|
|
|
+ if (m_process.type == SchemePlanManager::ImportEvalData) {
|
|
|
+ if (m_process.indexType == ProjectManager::TechIndex) {
|
|
|
+ t->setItemDelegate(m_comboDelegate);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- m_isSettingTable = false;
|
|
|
}
|
|
|
|
|
|
int EXDataTableView::currentPage() const
|
|
@@ -140,129 +212,10 @@ void EXDataTableView::setCurrentPage(int p)
|
|
|
}
|
|
|
m_currentPage = p;
|
|
|
m_previous->setEnabled(p > 1);
|
|
|
- m_next->setEnabled(p < m_mind1->levels() - 1);
|
|
|
+ m_next->setEnabled(p < m_models.size());
|
|
|
setupTabWidget();
|
|
|
|
|
|
- m_pageLab->setText(QString("共 %1 页, 当前第 %2 页").arg(m_mind1->levels() - 1).arg(p));
|
|
|
- updateCurrentTable();
|
|
|
-}
|
|
|
-
|
|
|
-void EXDataTableView::updateCurrentTable()
|
|
|
-{
|
|
|
- int c = m_dataTab->currentIndex();
|
|
|
- QTableView *table = (QTableView *)m_dataTab->widget(c);
|
|
|
-
|
|
|
- if (table == nullptr || table->model() == nullptr || m_isSettingTable) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- m_hNodes.clear();
|
|
|
- m_vNodes.clear();
|
|
|
- m_values.clear();
|
|
|
-
|
|
|
- QStandardItemModel *model = (QStandardItemModel *)table->model();
|
|
|
-
|
|
|
- /// 设置顶部水平方向标题
|
|
|
- int hIndex = -1;
|
|
|
- int dimensionIndex = -1; // 量纲所在列
|
|
|
- int typeIndex = -1; // 指标类型所在列
|
|
|
-
|
|
|
- // 指标
|
|
|
- CNodeData n = m_mind1->nodesInLevel(m_currentPage)[c];
|
|
|
- QList<CNodeData> hList = m_mind1->subNodes(n);
|
|
|
- // 以下情况需要显示指标
|
|
|
- // 导入权重分析数据
|
|
|
- // 导入需求分析评估的评估数据
|
|
|
- if (m_process.type == SchemePlanManager::ImportWeightData || m_process.indexType == ProjectManager::TechIndex) {
|
|
|
- for (CNodeData node : hList) {
|
|
|
- QStandardItem *item = new QStandardItem(node.name);
|
|
|
- item->setToolTip(node.remark);
|
|
|
- model->setHorizontalHeaderItem(++hIndex, item);
|
|
|
- m_hNodes.append(node.name);
|
|
|
- }
|
|
|
- }
|
|
|
- // 导入方案优选评估或效能评估的评估数据时, 需要显示量纲
|
|
|
- if (m_process.type == SchemePlanManager::ImportEvalData
|
|
|
- && (m_process.indexType == ProjectManager::OptimalIndex
|
|
|
- || m_process.indexType == ProjectManager::EfficiencyIndex)) {
|
|
|
- QStandardItem *item = new QStandardItem("指标量纲");
|
|
|
- model->setHorizontalHeaderItem(++hIndex, item);
|
|
|
- dimensionIndex = hIndex;
|
|
|
- }
|
|
|
- // 导入方案优选评估的评估数据时, 需要显示指标类型
|
|
|
- if (m_process.type == SchemePlanManager::ImportEvalData && m_process.indexType == ProjectManager::OptimalIndex) {
|
|
|
- QStandardItem *item = new QStandardItem("指标类型");
|
|
|
- model->setHorizontalHeaderItem(++hIndex, item);
|
|
|
- typeIndex = hIndex;
|
|
|
- }
|
|
|
-
|
|
|
- /// 设置左侧垂直方向标题
|
|
|
- QList<CNodeData> vList;
|
|
|
- // 导入权重分析的专家数据时, 显示指标
|
|
|
- if (m_process.type == SchemePlanManager::ImportWeightData) {
|
|
|
- vList = hList;
|
|
|
- }
|
|
|
- // 导入评估数据时, 显示最后一级指标
|
|
|
- if (m_process.type == SchemePlanManager::ImportEvalData) {
|
|
|
- if (m_process.indexType == ProjectManager::TechIndex) {
|
|
|
- vList = m_mind2->leaves();
|
|
|
- } else {
|
|
|
- vList = m_mind1->leaves();
|
|
|
- }
|
|
|
- }
|
|
|
- for (int i = 0; i < vList.count(); i++) {
|
|
|
- CNodeData node = vList[i];
|
|
|
- QStandardItem *item = new QStandardItem(QString(" %1 ").arg(node.name));
|
|
|
- item->setToolTip(node.remark);
|
|
|
- model->setVerticalHeaderItem(i, item);
|
|
|
- table->setRowHeight(i, 35);
|
|
|
- m_vNodes.append(node.name);
|
|
|
- }
|
|
|
-
|
|
|
- /// 填充量纲和指标类型
|
|
|
- for (int i = 0; i < vList.count(); i++) {
|
|
|
- CNodeData vNode = vList[i];
|
|
|
- QStandardItem *d = new QStandardItem();
|
|
|
- d->setData(Qt::AlignCenter, Qt::TextAlignmentRole); // 单元格文字居中
|
|
|
- if (dimensionIndex >= 0) {
|
|
|
- d->setText(vNode.dimension);
|
|
|
- model->setItem(i, dimensionIndex, d);
|
|
|
- }
|
|
|
-
|
|
|
- if (typeIndex >= 0) {
|
|
|
- model->setItem(i, typeIndex, d);
|
|
|
- }
|
|
|
- table->setRowHeight(i, 35);
|
|
|
- }
|
|
|
-
|
|
|
- if (m_process.type == SchemePlanManager::ImportWeightData) {
|
|
|
- for (int i = 0; i < vList.count(); i++) {
|
|
|
- CNodeData vNode = vList[i];
|
|
|
- for (int j = 0; j < hList.count(); j++) {
|
|
|
- CNodeData hNode = hList[i];
|
|
|
- QStandardItem *item = new QStandardItem();
|
|
|
- item->setData(Qt::AlignCenter, Qt::TextAlignmentRole);
|
|
|
- item->setEditable(false);
|
|
|
- if (i == j) {
|
|
|
- item->setText("1");
|
|
|
- }
|
|
|
- if (i >= j) {
|
|
|
- item->setBackground(QBrush(QColor("lightgray")));
|
|
|
- }
|
|
|
- model->setItem(i, j, item);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (m_process.type == SchemePlanManager::ImportEvalData || m_process.indexType == ProjectManager::TechIndex) {
|
|
|
- for (int i = 0; i < vList.count(); i++) {
|
|
|
- for (int j = 0; j < hList.count(); j++) {
|
|
|
- QStandardItem *item = new QStandardItem();
|
|
|
- item->setData(Qt::AlignCenter, Qt::TextAlignmentRole);
|
|
|
- model->setItem(i, j, item);
|
|
|
- table->setItemDelegate(m_comboDelegate);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ m_pageLab->setText(QString("共 %1 页, 当前第 %2 页").arg(m_models.size()).arg(p));
|
|
|
}
|
|
|
|
|
|
CMind *EXDataTableView::mind1() const
|
|
@@ -277,8 +230,6 @@ CMind *EXDataTableView::mind2() const
|
|
|
|
|
|
void EXDataTableView::exportData()
|
|
|
{
|
|
|
- qDebug() << __FUNCTION__ << __LINE__ << endl;
|
|
|
-
|
|
|
//文件夹路径
|
|
|
QFileDialog::Options options;
|
|
|
options |= QFileDialog::DontUseNativeDialog;
|
|
@@ -289,8 +240,6 @@ void EXDataTableView::exportData()
|
|
|
QString fileName = m_user->userName + "-"
|
|
|
+ ProjectManager::nameOfIndexType((ProjectManager::IndexType)m_process.indexType) + "-"
|
|
|
+ m_proj->projectName;
|
|
|
- // QString filePath = "";
|
|
|
- // filePath = QCoreApplication::applicationDirPath();
|
|
|
QDir dirReportPath(filePath);
|
|
|
if (!dirReportPath.exists()) {
|
|
|
if (dirReportPath.mkpath(filePath)) {
|
|
@@ -304,44 +253,56 @@ void EXDataTableView::exportData()
|
|
|
file.remove();
|
|
|
}
|
|
|
|
|
|
- for (int i = 1; i < m_mind1->levels(); i++) {
|
|
|
- if (m_models.keys().contains(i) == false) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- QList<CNodeData> nodes = m_mind1->nodesInLevel(i);
|
|
|
+ for (int i = 1; i <= m_models.size(); i++) {
|
|
|
+ QList<EXDataItemModel *> mList = m_models[i];
|
|
|
+ for (int j = 0; j < mList.count(); j++) {
|
|
|
+ EXDataItemModel *model = mList[j];
|
|
|
+ m_export->addSheet(model->property(kTabName).toString());
|
|
|
|
|
|
- for (int j = 0; j < m_models[i].count(); j++) {
|
|
|
- CNodeData node = nodes[j];
|
|
|
- QStandardItemModel *model = m_models[i][j];
|
|
|
- m_export->addSheet(node.name);
|
|
|
int row = model->rowCount();
|
|
|
int col = model->columnCount();
|
|
|
-
|
|
|
m_export->setColumnWidth(1, 20);
|
|
|
for (int c = 2; c < col + 2; c++) {
|
|
|
- QStandardItem *head = model->horizontalHeaderItem(c - 2);
|
|
|
- m_export->write(1, c, head->text());
|
|
|
- m_export->setColumnWidth(c, head->text().size() == 0 ? 40 : head->text().size() * 4);
|
|
|
+ QStandardItem *hHead = model->horizontalHeaderItem(c - 2);
|
|
|
+ m_export->write(1, c, hHead->text());
|
|
|
+ m_export->setColumnWidth(c, hHead->text().size() == 0 ? 40 : hHead->text().size() * 4);
|
|
|
}
|
|
|
for (int r = 2; r < row + 2; r++) {
|
|
|
- QStandardItem *head = model->verticalHeaderItem(r - 2);
|
|
|
- m_export->write(r, 1, head->text());
|
|
|
-
|
|
|
+ QStandardItem *vHead = model->verticalHeaderItem(r - 2);
|
|
|
+ m_export->write(r, 1, vHead->text());
|
|
|
for (int c = 2; c < col + 2; c++) {
|
|
|
- QStandardItem *head = model->item(r - 2, c - 2);
|
|
|
- m_export->write(r, c, head->text());
|
|
|
+ QStandardItem *item = model->item(r - 2, c - 2);
|
|
|
+ m_export->write(r, c, item->text());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- m_export->saveAs(filePath);
|
|
|
}
|
|
|
+
|
|
|
+ m_export->addSheet("专家信息");
|
|
|
+ m_export->write(1, 1, "ID");
|
|
|
+ m_export->write(1, 2, "账号");
|
|
|
+ m_export->write(1, 3, "单位");
|
|
|
+ m_export->write(1, 4, "职务");
|
|
|
+ m_export->write(1, 5, "专业");
|
|
|
+ m_export->write(1, 6, "联系方式");
|
|
|
+ m_export->write(1, 7, "填写时间");
|
|
|
+ m_export->write(1, 8, "备注");
|
|
|
+ m_export->write(2, 1, m_user->id);
|
|
|
+ m_export->write(2, 2, m_user->userName);
|
|
|
+ m_export->write(2, 3, m_user->workPosition);
|
|
|
+ m_export->write(2, 4, m_user->post);
|
|
|
+ m_export->write(2, 5, m_user->major);
|
|
|
+ m_export->write(2, 6, m_user->phone);
|
|
|
+ m_export->write(2, 7, m_user->writeTime);
|
|
|
+ m_export->write(2, 8, m_user->remark);
|
|
|
+
|
|
|
+ m_export->saveAs(filePath);
|
|
|
}
|
|
|
void EXDataTableView::editItemData(const QModelIndex &index, const QString &val)
|
|
|
{
|
|
|
- int c = m_dataTab->currentIndex();
|
|
|
- QTableView *table = (QTableView *)m_dataTab->widget(c);
|
|
|
- QStandardItemModel *model = (QStandardItemModel *)table->model();
|
|
|
+ int c = m_dataTab->currentIndex();
|
|
|
+ QTableView *table = (QTableView *)m_dataTab->widget(c);
|
|
|
+ EXDataItemModel *model = (EXDataItemModel *)table->model();
|
|
|
model->itemFromIndex(index)->setText(val);
|
|
|
QString symmetry;
|
|
|
if (val.startsWith("1/")) {
|
|
@@ -356,6 +317,23 @@ void EXDataTableView::editItemData(const QModelIndex &index, const QString &val)
|
|
|
model->item(index.column(), index.row())->setText(symmetry);
|
|
|
}
|
|
|
|
|
|
+void EXDataTableView::updateModel(EXDataItemModel *model, QList<CNodeData> &hHeaders, QList<CNodeData> &vHeaders)
|
|
|
+{
|
|
|
+ for (int i = 0; i < hHeaders.size(); i++) {
|
|
|
+ CNodeData node = hHeaders[i];
|
|
|
+ QStandardItem *item = new QStandardItem(node.name);
|
|
|
+ item->setToolTip(node.remark);
|
|
|
+ model->setHorizontalHeaderItem(i, item);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < vHeaders.size(); i++) {
|
|
|
+ CNodeData node = vHeaders[i];
|
|
|
+ QStandardItem *item = new QStandardItem(node.name);
|
|
|
+ item->setToolTip(node.remark);
|
|
|
+ model->setVerticalHeaderItem(i, item);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void EXDataTableView::slotPrevious()
|
|
|
{
|
|
|
setCurrentPage(m_currentPage - 1);
|
|
@@ -369,7 +347,7 @@ void EXDataTableView::slotNext()
|
|
|
void EXDataTableView::slotTabCurrentChanged(int c)
|
|
|
{
|
|
|
Q_UNUSED(c)
|
|
|
- updateCurrentTable();
|
|
|
+ // updateCurrentTable();
|
|
|
}
|
|
|
|
|
|
void EXDataTableView::slotItemClicked(const QModelIndex &index)
|
|
@@ -384,8 +362,8 @@ void EXDataTableView::slotItemClicked(const QModelIndex &index)
|
|
|
|
|
|
QStringList l = { "1/9", "1/7", "1/5", "1/3", "1", "3", "5", "7", "9" };
|
|
|
|
|
|
- QTableView *table = (QTableView *)sender();
|
|
|
- QStandardItemModel *model = (QStandardItemModel *)table->model();
|
|
|
+ QTableView *table = (QTableView *)sender();
|
|
|
+ EXDataItemModel *model = (EXDataItemModel *)table->model();
|
|
|
// SchemeBar *scheme =
|
|
|
// new SchemeBar(model->item(index.row(), 0)->text(),
|
|
|
// model->horizontalHeaderItem(index.column())->text(), l);
|
|
@@ -407,9 +385,9 @@ void EXDataTableView::slotItemClicked(const QModelIndex &index)
|
|
|
void EXDataTableView::slotSave()
|
|
|
{
|
|
|
return;
|
|
|
- int c = m_dataTab->currentIndex();
|
|
|
- QTableView *table = (QTableView *)m_dataTab->widget(c);
|
|
|
- QStandardItemModel *model = (QStandardItemModel *)table->model();
|
|
|
+ int c = m_dataTab->currentIndex();
|
|
|
+ QTableView *table = (QTableView *)m_dataTab->widget(c);
|
|
|
+ EXDataItemModel *model = (EXDataItemModel *)table->model();
|
|
|
|
|
|
QList<NodeMatrixInfo *> values;
|
|
|
|