You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ParamParse.cpp 9.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. #include "ParamParse.h"
  2. #include <utility> /**< std::pair */
  3. #include "MyButton.h"
  4. ParamParse::ParamParse(QWidget* parent)
  5. : QWidget(parent)
  6. , m_pScrollLayout(nullptr)
  7. , m_pStandardItemModel(nullptr)
  8. , m_pSingleton(nullptr)
  9. , m_strExePath("")
  10. {
  11. ui.setupUi(this);
  12. m_pSingleton = Singleton::CreateInstance();
  13. initParamList(); // 初始化参数列表
  14. initScrollArea(); // 初始化滚动区域
  15. }
  16. ParamParse::~ParamParse()
  17. {
  18. delete m_pScrollLayout;
  19. m_pScrollLayout = nullptr;
  20. delete m_pStandardItemModel;
  21. m_pStandardItemModel = nullptr;
  22. ClearCurveWidgets();
  23. }
  24. // 初始化参数列表
  25. void ParamParse::initParamList()
  26. {
  27. if (m_pStandardItemModel) {
  28. m_pStandardItemModel->clear();
  29. delete m_pStandardItemModel;
  30. m_pStandardItemModel = nullptr;
  31. }
  32. m_pStandardItemModel = new QStandardItemModel();
  33. m_pStandardItemModel->setColumnCount(6);
  34. m_pStandardItemModel->setHorizontalHeaderLabels(
  35. {"参数名称", "参数代号", "参数单位", "曲线颜色", "执行操作", "编号索引"});
  36. ui.tv_paramList->setModel(m_pStandardItemModel);
  37. ui.tv_paramList->setColumnWidth(0, 120); // 第一列
  38. ui.tv_paramList->setColumnWidth(1, 80); // 第二列
  39. ui.tv_paramList->setColumnWidth(2, 80); // 第三列
  40. ui.tv_paramList->setColumnWidth(3, 80); // 第四列
  41. ui.tv_paramList->setColumnWidth(4, 80); // 第五列
  42. ui.tv_paramList->setColumnWidth(5, 40); // 第六列
  43. ui.tv_paramList->header()->setDefaultAlignment(Qt::AlignCenter); // 设置表头居中
  44. ui.tv_paramList->setColumnHidden(5, true); // 编号索引列隐藏
  45. // 树状结构样式表
  46. ui.tv_paramList->setStyleSheet("QTreeView::item{min-height:30px;align:center;}");
  47. }
  48. void ParamParse::initScrollArea()
  49. {
  50. m_pScrollLayout = new QGridLayout(ui.sa_wgtContent);
  51. }
  52. void ParamParse::ClearCurveWidgets()
  53. {
  54. for (auto curveWidget : m_mapIntCurveWidget) {
  55. if (curveWidget.second) {
  56. curveWidget.second->close();
  57. delete curveWidget.second;
  58. curveWidget.second = nullptr;
  59. }
  60. }
  61. m_mapIntCurveWidget.clear();
  62. }
  63. void ParamParse::switchModelType(QString modeltype)
  64. {
  65. ClearCurveWidgets();
  66. QMutexLocker locker(&m_mutex);
  67. m_mapStrConfigInfo = m_pSingleton->getConfigInfo();
  68. initParamList();
  69. int count = 1;
  70. auto configIter = m_mapStrConfigInfo.find(modeltype);
  71. if (configIter != m_mapStrConfigInfo.end()) {
  72. // 添加节点信息
  73. QStandardItem* m_frameItem = new QStandardItem(configIter->first);
  74. m_pStandardItemModel->appendRow(m_frameItem);
  75. m_frameItem->setCheckable(false);
  76. for (auto param : configIter->second->m_mapUIntParam) {
  77. // 数字量和图像不显示
  78. if (param.second->m_usModel == 2 || param.second->m_usModel == 3) {
  79. continue;
  80. }
  81. // 参数名称
  82. QString strTitle = param.second->m_strTitle;
  83. QStandardItem* m_pTitleItem = new QStandardItem(strTitle);
  84. m_frameItem->appendRow(m_pTitleItem);
  85. // 参数代号
  86. QString strCode = param.second->m_strCode;
  87. QStandardItem* m_pCodeItem = new QStandardItem(strCode);
  88. m_frameItem->setChild(m_pTitleItem->index().row(), 1, m_pCodeItem);
  89. // 参数单位
  90. QString strUnit = param.second->m_strUnit;
  91. QStandardItem* m_pUnitItem = new QStandardItem(strUnit);
  92. m_frameItem->setChild(m_pTitleItem->index().row(), 2, m_pUnitItem);
  93. // 曲线颜色
  94. QStandardItem* m_pColorItem = new QStandardItem("————");
  95. QColor color =
  96. QColor(qSin(count - 1) * 100 + 100, qSin((count - 1) * 2 + 0.6) * 100 + 100,
  97. qSin((count - 1) * 1.3 + 0.6) * 100 + 100);
  98. m_pColorItem->setForeground(color);
  99. m_pColorItem->setTextAlignment(Qt::AlignCenter);
  100. m_frameItem->setChild(m_pTitleItem->index().row(), 3, m_pColorItem);
  101. // 执行操作
  102. QStandardItem* m_pOperaItem = new QStandardItem("");
  103. m_frameItem->setChild(m_pTitleItem->index().row(), 4, m_pOperaItem);
  104. MyButton* m_pOperaBtn = new MyButton(m_pOperaItem, this); // 显示操作
  105. m_pOperaBtn->setFixedSize(50, 20);
  106. switch (param.second->m_usModel) {
  107. case 1: // 工程量
  108. m_pOperaBtn->setText("曲线");
  109. break;
  110. // case 2: //数字量
  111. // m_pOperaBtn->setText("另存");
  112. // break;
  113. case 4: // 状态量
  114. m_pOperaBtn->setText("阶梯");
  115. break;
  116. default:
  117. break;
  118. }
  119. m_pOperaBtn->setStyleSheet(
  120. "font-size:14px;\n"
  121. "border:solid 1px;\n"
  122. "background:white;\n"
  123. "font-family:PingFangSC-Regular,PingFang SC;\n"
  124. "font-weight:400;\n"
  125. "color:#155bd4;\n"
  126. "line-height:20px;");
  127. connect(m_pOperaBtn, &MyButton::onSingleClick, this, &ParamParse::operateItem);
  128. QHBoxLayout* m_pHBoxLayout = new QHBoxLayout();
  129. m_pHBoxLayout->setMargin(5);
  130. m_pHBoxLayout->addWidget(m_pOperaBtn);
  131. QWidget* m_pOperaWidget = new QWidget();
  132. m_pOperaWidget->setFixedSize(60, 30);
  133. m_pOperaWidget->setLayout(m_pHBoxLayout);
  134. ui.tv_paramList->setIndexWidget(m_pOperaItem->index(), m_pOperaWidget);
  135. // 创建曲线窗口
  136. {
  137. // 工程量或状态量
  138. if ("曲线" == m_pOperaBtn->text() || "阶梯" == m_pOperaBtn->text()) {
  139. CurveInfo* pCurveInfo = new CurveInfo();
  140. pCurveInfo->m_strTitle = strTitle;
  141. pCurveInfo->m_curveColor = color;
  142. pCurveInfo->m_curveCount = count;
  143. CurveWidget* curveWidget = new CurveWidget(ui.sa_wgtContent);
  144. connect(curveWidget, &CurveWidget::hideCurveWidget, this,
  145. &ParamParse::hideCurveWidget);
  146. connect(this, &ParamParse::setParseStatus, curveWidget,
  147. &CurveWidget::setParseStatus);
  148. if ("曲线" == m_pOperaBtn->text()) {
  149. pCurveInfo->m_usCurveModel = 1;
  150. } else if ("阶梯" == m_pOperaBtn->text()) {
  151. pCurveInfo->m_usCurveModel = 4;
  152. }
  153. curveWidget->setParam(pCurveInfo);
  154. curveWidget->setVisible(false);
  155. m_mapIntCurveWidget.insert(std::pair<int, CurveWidget*>(count, curveWidget));
  156. qDebug() << "map size: " << m_mapIntCurveWidget.size();
  157. param.second->setCurveWidget(curveWidget);
  158. }
  159. // else if ("另存" == m_pOperaBtn->text()) { //数字量
  160. //}
  161. }
  162. // 编号索引
  163. QStandardItem* m_pIndexItem = new QStandardItem(QString::number(count));
  164. m_frameItem->setChild(m_pTitleItem->index().row(), 5, m_pIndexItem);
  165. m_pIndexItem->setTextAlignment(Qt::AlignCenter);
  166. ++count;
  167. }
  168. } else {
  169. qDebug() << "The model type(" << modeltype << ") is unsupported!";
  170. }
  171. }
  172. void ParamParse::operateItem(QStandardItem* item, QPushButton* button)
  173. {
  174. QModelIndex index = item->index();
  175. // 参数名称
  176. QString strTitle = index.sibling(index.row(), 0).data().toString();
  177. // 曲线颜色
  178. QStandardItem* colorItem = m_pStandardItemModel->itemFromIndex(index.sibling(index.row(), 3));
  179. QColor color = colorItem->foreground().color();
  180. // 编号索引
  181. int count = index.sibling(index.row(), 5).data().toInt();
  182. if ("曲线" == button->text() || "阶梯" == button->text()) { // 工程量或状态量
  183. for (auto iter : m_mapIntCurveWidget) {
  184. m_pScrollLayout->removeWidget(iter.second);
  185. }
  186. // Relayout
  187. size_t i = 0;
  188. for (auto iter : m_mapIntCurveWidget) {
  189. if (count == iter.first) {
  190. iter.second->setVisible(!iter.second->isVisible());
  191. }
  192. if (iter.second->isVisible()) {
  193. m_pScrollLayout->addWidget(iter.second, i / 2, i % 2);
  194. i++;
  195. }
  196. }
  197. }
  198. }
  199. void ParamParse::hideCurveWidget(int count)
  200. {
  201. // 移除所关闭的曲线窗口
  202. m_mapIntCurveWidget.at(count)->hide();
  203. }
  204. void ParamParse::parseStatus(unsigned int status)
  205. {
  206. m_uiParseStatus = status;
  207. emit setParseStatus(m_uiParseStatus);
  208. }