|
- #include "ParamParse.h"
-
- #include <utility> /**< std::pair */
-
- #include "MyButton.h"
-
- ParamParse::ParamParse(QWidget* parent)
- : QWidget(parent)
- , m_pScrollLayout(nullptr)
- , m_pStandardItemModel(nullptr)
- , m_pSingleton(nullptr)
- , m_strExePath("")
- {
- ui.setupUi(this);
- m_pSingleton = Singleton::CreateInstance();
- initParamList(); // 初始化参数列表
- initScrollArea(); // 初始化滚动区域
- }
-
- ParamParse::~ParamParse()
- {
- delete m_pScrollLayout;
- m_pScrollLayout = nullptr;
-
- delete m_pStandardItemModel;
- m_pStandardItemModel = nullptr;
-
- ClearCurveWidgets();
- }
-
- // 初始化参数列表
- void ParamParse::initParamList()
- {
- if (m_pStandardItemModel) {
- m_pStandardItemModel->clear();
- delete m_pStandardItemModel;
- m_pStandardItemModel = nullptr;
- }
-
- m_pStandardItemModel = new QStandardItemModel();
- m_pStandardItemModel->setColumnCount(6);
- m_pStandardItemModel->setHorizontalHeaderLabels(
- {"参数名称", "参数代号", "参数单位", "曲线颜色", "执行操作", "编号索引"});
- ui.tv_paramList->setModel(m_pStandardItemModel);
- ui.tv_paramList->setColumnWidth(0, 120); // 第一列
- ui.tv_paramList->setColumnWidth(1, 80); // 第二列
- ui.tv_paramList->setColumnWidth(2, 80); // 第三列
- ui.tv_paramList->setColumnWidth(3, 80); // 第四列
- ui.tv_paramList->setColumnWidth(4, 80); // 第五列
- ui.tv_paramList->setColumnWidth(5, 40); // 第六列
- ui.tv_paramList->header()->setDefaultAlignment(Qt::AlignCenter); // 设置表头居中
- ui.tv_paramList->setColumnHidden(5, true); // 编号索引列隐藏
- // 树状结构样式表
- ui.tv_paramList->setStyleSheet("QTreeView::item{min-height:30px;align:center;}");
- }
-
- void ParamParse::initScrollArea()
- {
- m_pScrollLayout = new QGridLayout(ui.sa_wgtContent);
- }
-
- void ParamParse::ClearCurveWidgets()
- {
- for (auto curveWidget : m_mapIntCurveWidget) {
- if (curveWidget.second) {
- curveWidget.second->close();
- delete curveWidget.second;
- curveWidget.second = nullptr;
- }
- }
- m_mapIntCurveWidget.clear();
- }
-
- void ParamParse::switchModelType(QString modeltype)
- {
- ClearCurveWidgets();
-
- QMutexLocker locker(&m_mutex);
- m_mapStrConfigInfo = m_pSingleton->getConfigInfo();
- initParamList();
-
- int count = 1;
- auto configIter = m_mapStrConfigInfo.find(modeltype);
- if (configIter != m_mapStrConfigInfo.end()) {
- // 添加节点信息
- QStandardItem* m_frameItem = new QStandardItem(configIter->first);
- m_pStandardItemModel->appendRow(m_frameItem);
- m_frameItem->setCheckable(false);
-
- for (auto param : configIter->second->m_mapUIntParam) {
- // 数字量和图像不显示
- if (param.second->m_usModel == 2 || param.second->m_usModel == 3) {
- continue;
- }
-
- // 参数名称
- QString strTitle = param.second->m_strTitle;
- QStandardItem* m_pTitleItem = new QStandardItem(strTitle);
- m_frameItem->appendRow(m_pTitleItem);
- // 参数代号
- QString strCode = param.second->m_strCode;
- QStandardItem* m_pCodeItem = new QStandardItem(strCode);
- m_frameItem->setChild(m_pTitleItem->index().row(), 1, m_pCodeItem);
- // 参数单位
- QString strUnit = param.second->m_strUnit;
- QStandardItem* m_pUnitItem = new QStandardItem(strUnit);
- m_frameItem->setChild(m_pTitleItem->index().row(), 2, m_pUnitItem);
- // 曲线颜色
- QStandardItem* m_pColorItem = new QStandardItem("————");
- QColor color =
- QColor(qSin(count - 1) * 100 + 100, qSin((count - 1) * 2 + 0.6) * 100 + 100,
- qSin((count - 1) * 1.3 + 0.6) * 100 + 100);
- m_pColorItem->setForeground(color);
- m_pColorItem->setTextAlignment(Qt::AlignCenter);
- m_frameItem->setChild(m_pTitleItem->index().row(), 3, m_pColorItem);
- // 执行操作
- QStandardItem* m_pOperaItem = new QStandardItem("");
- m_frameItem->setChild(m_pTitleItem->index().row(), 4, m_pOperaItem);
- MyButton* m_pOperaBtn = new MyButton(m_pOperaItem, this); // 显示操作
- m_pOperaBtn->setFixedSize(50, 20);
- switch (param.second->m_usModel) {
- case 1: // 工程量
- m_pOperaBtn->setText("曲线");
- break;
- // case 2: //数字量
- // m_pOperaBtn->setText("另存");
- // break;
- case 4: // 状态量
- m_pOperaBtn->setText("阶梯");
- break;
- default:
- break;
- }
- m_pOperaBtn->setStyleSheet(
- "font-size:14px;\n"
- "border:solid 1px;\n"
- "background:white;\n"
- "font-family:PingFangSC-Regular,PingFang SC;\n"
- "font-weight:400;\n"
- "color:#155bd4;\n"
- "line-height:20px;");
- connect(m_pOperaBtn, &MyButton::onSingleClick, this, &ParamParse::operateItem);
- QHBoxLayout* m_pHBoxLayout = new QHBoxLayout();
- m_pHBoxLayout->setMargin(5);
- m_pHBoxLayout->addWidget(m_pOperaBtn);
- QWidget* m_pOperaWidget = new QWidget();
- m_pOperaWidget->setFixedSize(60, 30);
- m_pOperaWidget->setLayout(m_pHBoxLayout);
- ui.tv_paramList->setIndexWidget(m_pOperaItem->index(), m_pOperaWidget);
- // 创建曲线窗口
- {
- // 工程量或状态量
- if ("曲线" == m_pOperaBtn->text() || "阶梯" == m_pOperaBtn->text()) {
- CurveInfo* pCurveInfo = new CurveInfo();
- pCurveInfo->m_strTitle = strTitle;
- pCurveInfo->m_curveColor = color;
- pCurveInfo->m_curveCount = count;
- CurveWidget* curveWidget = new CurveWidget(ui.sa_wgtContent);
- connect(curveWidget, &CurveWidget::hideCurveWidget, this,
- &ParamParse::hideCurveWidget);
- connect(this, &ParamParse::setParseStatus, curveWidget,
- &CurveWidget::setParseStatus);
- if ("曲线" == m_pOperaBtn->text()) {
- pCurveInfo->m_usCurveModel = 1;
- } else if ("阶梯" == m_pOperaBtn->text()) {
- pCurveInfo->m_usCurveModel = 4;
- }
- curveWidget->setParam(pCurveInfo);
- curveWidget->setVisible(false);
- m_mapIntCurveWidget.insert(std::pair<int, CurveWidget*>(count, curveWidget));
- qDebug() << "map size: " << m_mapIntCurveWidget.size();
- param.second->setCurveWidget(curveWidget);
- }
- // else if ("另存" == m_pOperaBtn->text()) { //数字量
-
- //}
- }
- // 编号索引
- QStandardItem* m_pIndexItem = new QStandardItem(QString::number(count));
- m_frameItem->setChild(m_pTitleItem->index().row(), 5, m_pIndexItem);
- m_pIndexItem->setTextAlignment(Qt::AlignCenter);
- ++count;
- }
- } else {
- qDebug() << "The model type(" << modeltype << ") is unsupported!";
- }
- }
-
- void ParamParse::operateItem(QStandardItem* item, QPushButton* button)
- {
- QModelIndex index = item->index();
- // 参数名称
- QString strTitle = index.sibling(index.row(), 0).data().toString();
- // 曲线颜色
- QStandardItem* colorItem = m_pStandardItemModel->itemFromIndex(index.sibling(index.row(), 3));
- QColor color = colorItem->foreground().color();
- // 编号索引
- int count = index.sibling(index.row(), 5).data().toInt();
- if ("曲线" == button->text() || "阶梯" == button->text()) { // 工程量或状态量
- for (auto iter : m_mapIntCurveWidget) {
- m_pScrollLayout->removeWidget(iter.second);
- }
-
- // Relayout
- size_t i = 0;
- for (auto iter : m_mapIntCurveWidget) {
- if (count == iter.first) {
- iter.second->setVisible(!iter.second->isVisible());
- }
-
- if (iter.second->isVisible()) {
- m_pScrollLayout->addWidget(iter.second, i / 2, i % 2);
- i++;
- }
- }
- }
- }
-
- void ParamParse::hideCurveWidget(int count)
- {
- // 移除所关闭的曲线窗口
- m_mapIntCurveWidget.at(count)->hide();
- }
-
- void ParamParse::parseStatus(unsigned int status)
- {
- m_uiParseStatus = status;
- emit setParseStatus(m_uiParseStatus);
- }
|