#include "CDevSpePointWidget.h" #include "public/pub_utility_api/FileStyle.h" #include "CRealDataCollect.h" #include "CRealTableModel.h" #include #include #include #include CDevSpePointWidget::CDevSpePointWidget(QWidget *parent, bool isEditMode) : QWidget(parent), m_pDpcdaForApp(Q_NULLPTR), m_pTableView(Q_NULLPTR), m_pTableModel(Q_NULLPTR), m_isEditMode(isEditMode) { initialize(); } CDevSpePointWidget::~CDevSpePointWidget() { if(m_pDpcdaForApp) { m_pDpcdaForApp->unsubscribeAll(); delete m_pDpcdaForApp; } m_pDpcdaForApp = NULL; } void CDevSpePointWidget::setCornerName(const QString &name) { int columnSize = m_columnNameList.size(); int columnTagSize = m_columnTagList.size(); if(columnSize == columnTagSize) { m_columnNameList.push_front(name); } else if(columnSize == (columnTagSize + 1)) { m_columnNameList[0] = name; } m_pTableModel->setHeader(m_columnNameList); } void CDevSpePointWidget::showNameType(int labelType) { deviceOrGroupShowType = labelType; } QString CDevSpePointWidget::addRow(const QString &pointTag) { if(pointTag.isEmpty()) { return tr("测点标签为空!"); } iot_dbms::CDbApi objReader(DB_CONN_MODEL_READ); if(!objReader.open()) { return tr("数据库连接打开失败!"); } QStringList pointList = pointTag.split(","); QString error = QString(); int i=0; if(deviceOrGroupShowType == 0) //行标题默认模式-->0 { foreach (QString point, pointList) { //< 检查标签是否合法 QStringList list = point.split("."); if(list.length() != 7) { error += tr("测点标签不合法!\n"); continue; } //< 检查是否重复添加 QString device =list[3] + "." + list[4];//occ.PDBD22_PDGKC1 QMap>::iterator iter = m_dataMap.find(device); if(iter != m_dataMap.end()) { error += tr("重复添加!\n"); continue; } //< 添加第一列数据(设备描述) QString deviceName = queryDeviceDesc(device, objReader); if(deviceName.isEmpty()) { error += tr("查询设备描述失败!\n"); continue; } //添加排序 device= QString("%1").arg(i++, 3, 10, QChar('0')) +"." +device; ST_RealData devData; devData.description = deviceName; devData.isInit = false; devData.type = TYPE_DESC; m_dataMap[device].append(devData); //< 添加点标签列数据 if(m_columnTagList.isEmpty()) { continue; } for(int nIndex(0); nIndex &pair = m_columnTagList[nIndex]; ST_RealData realData; realData.tag_name = device.mid(device.indexOf(".")+1) + "." + pair.first; realData.table_name = pair.second; realData.isInit = false; realData.type = TYPE_POINT; if(realData.table_name == "digital") { realData.stateTextName = queryDigitalStateText(realData.tag_name, objReader); } m_dataMap[device].append(realData); } } } else if(deviceOrGroupShowType == 1) //行标题按设备组显示-->1(每行参数取该组全部设备存在的第一个值) { foreach (QString point, pointList) { //< 检查标签是否合法 QStringList list = point.split("."); if(list.length() != 7) { error += tr("测点标签不合法!\n"); continue; } //< 检查是否重复添加 QString device =list[3] + "." + list[4].split("_")[0]; //S12.6102 qDebug() << "deviceOrGroupShowType(1) device: " << device; QMap>::iterator iter = m_dataMap.find(device); if(iter != m_dataMap.end()) { error += tr("重复添加!\n"); continue; } //< 添加第一列数据(设备描述) QString deviceName = queryGetGroupDescription(device, objReader); //设备组名,如:6102柜17变1#变压器 if(deviceName.isEmpty()) { error += tr("查询设备描述失败!\n"); continue; } //添加排序 device= QString("%1").arg(i++, 3, 10, QChar('0')) +"." +device; //000.S12.6102 qDebug() << "deviceOrGroupShowType(1) device(1): " << device; ST_RealData devData; devData.description = deviceName; devData.isInit = false; devData.type = TYPE_DESC; m_dataMap[device].append(devData); //< 添加点标签列数据 if(m_columnTagList.isEmpty()) { continue; } qDebug() << "deviceOrGroupShowType(1) m_columnTagList.isEmpty()"; for(int nIndex(0); nIndex &pair = m_columnTagList[nIndex]; ST_RealData realData; realData.tag_name = device.mid(device.indexOf(".")+1) + "." + pair.first; realData.table_name = pair.second; qDebug() << "realData-->" << realData.tag_name << realData.table_name; realData.isInit = false; realData.type = TYPE_POINT; if(realData.table_name == "digital") { realData.stateTextName = queryDigitalStateText(realData.tag_name, objReader); } m_dataMap[device].append(realData); } } } else if(deviceOrGroupShowType == 2) //行标题按设备名显示-->2 { foreach (QString point, pointList) { //< 检查标签是否合法 QStringList list = point.split("."); if(list.length() != 7) { error += tr("测点标签不合法!\n"); continue; } //< 检查是否重复添加 QString device =list[3] + "." + list[4].split("_")[0]; //kxg.KXG1Meter1 QMap>::iterator iter = m_dataMap.find(device); if(iter != m_dataMap.end()) { error += tr("重复添加!\n"); continue; } //< 添加第一列数据(设备描述) QString valueType = list[5]; device = queryGetDevInfoTagName(valueType, device, objReader); iot_dbms::CDbApi descriptionReader(DB_CONN_MODEL_READ); if(!descriptionReader.open()) { return tr("数据库连接打开失败!"); } QString deviceName = queryGetDevInfoDescription(device, descriptionReader); if(deviceName.isEmpty()) { error += tr("查询设备描述失败!\n"); continue; } //添加排序 device= QString("%1").arg(i++, 3, 10, QChar('0')) +"." +device; ST_RealData devData; devData.description = deviceName; devData.isInit = false; devData.type = TYPE_DESC; m_dataMap[device].append(devData); //< 添加点标签列数据 if(m_columnTagList.isEmpty()) { continue; } for(int nIndex(0); nIndex &pair = m_columnTagList[nIndex]; ST_RealData realData; realData.tag_name = device.mid(device.indexOf(".")+1) + "." + pair.first; realData.table_name = pair.second; realData.isInit = false; realData.type = TYPE_POINT; if(realData.table_name == "digital") { realData.stateTextName = queryDigitalStateText(realData.tag_name, objReader); } m_dataMap[device].append(realData); } } } else if(deviceOrGroupShowType == 3) //行标题按设备组名显示,取该组第一个设备和它的值 { foreach (QString point, pointList) { QStringList list = point.split("."); //< 检查标签是否合法 if(list.length() != 7) { error += ("测点标签不合法!\n"); continue; } //< 检查是否重复添加 QString device = list[3] + "." + list[4].split("_")[0]; QMap>::iterator iter = m_dataMap.find(device); if(iter != m_dataMap.end()) { error += tr("重复添加!\n"); continue; } //< 添加第一列数据(设备描述) QString deviceName = queryGetGroupDescription(device, objReader); if(deviceName.isEmpty()) { error += tr("查询设备描述失败!\n"); continue; } device = list[3] + "." + list[4]; device = QString("%1").arg(i++, 3, 10, QChar('0')) + "." + device; ST_RealData devData; devData.description = deviceName; devData.isInit = false; devData.type = TYPE_DESC; m_dataMap[device].append(devData); //< 添加点标签列数据 if(m_columnTagList.isEmpty()) { continue; } for(int nIndex(0); nIndex &pair = m_columnTagList[nIndex]; ST_RealData realData; realData.tag_name = device.mid(device.indexOf(".")+1) + "." + pair.first; realData.table_name = pair.second; qDebug() << "realData-->" << realData.tag_name << realData.table_name; realData.isInit = false; realData.type = TYPE_POINT; if(realData.table_name == "digital") { realData.stateTextName = queryDigitalStateText(realData.tag_name, objReader); } m_dataMap[device].append(realData); } } } m_pTableModel->updateRealData(m_dataMap); // m_pTableModel->sort(1,Qt::AscendingOrder); return error; } QString CDevSpePointWidget::addRowName(const QString &pointTag, const QString &DevName) { if(pointTag.isEmpty()) { return tr("测点标签为空!"); } QStringList pointList = pointTag.split(","); QStringList DevNameList = DevName.split(","); if(pointList.count() != DevNameList.count()) { //转化为字符串 QString str = QString("%1:%2").arg(pointList.count(), 2, 10, QLatin1Char('0')).arg(DevNameList.count(), 2, 10, QLatin1Char('0')); return str; } iot_dbms::CDbApi objReader(DB_CONN_MODEL_READ); if(!objReader.open()) { return tr("数据库连接打开失败!"); } QString error = QString(); int i=0; if(deviceOrGroupShowType == 0) //行标题默认模式-->0 { foreach (QString point, pointList) { //< 检查标签是否合法 QStringList list = point.split("."); if(list.length() != 7) { error += tr("测点标签不合法!\n"); continue; } //< 检查是否重复添加 QString device =list[3] + "." + list[4]; //occ.PDBD22_PDGKC1 QMap>::iterator iter = m_dataMap.find(device); if(iter != m_dataMap.end()) { error += tr("重复添加!\n"); continue; } //< 添加第一列数据(设备描述) QString deviceName = DevNameList[i];//queryDeviceDesc(device, objReader); //添加排序 device= QString("%1").arg(i++, 3, 10, QChar('0')) +"." +device; ST_RealData devData; devData.description = deviceName; devData.isInit = false; devData.type = TYPE_DESC; m_dataMap[device].append(devData); //< 添加点标签列数据 if(m_columnTagList.isEmpty()) { continue; } for(int nIndex(0); nIndex &pair = m_columnTagList[nIndex]; ST_RealData realData; realData.tag_name = device.mid(device.indexOf(".")+1) + "." + pair.first; realData.table_name = pair.second; realData.isInit = false; realData.type = TYPE_POINT; if(realData.table_name == "digital") { realData.stateTextName = queryDigitalStateText(realData.tag_name, objReader); } m_dataMap[device].append(realData); } } } else if(deviceOrGroupShowType == 1 || deviceOrGroupShowType == 3) //行标题按设备组显示-->1(每行参数取该组全部设备存在的第一个值) { foreach (QString point, pointList) { //< 检查标签是否合法 QStringList list = point.split("."); if(list.length() != 7) { error += tr("测点标签不合法!\n"); continue; } //< 检查是否重复添加 QString device =list[3] + "." + list[4].split("_")[0]; //S12.6102 QMap>::iterator iter = m_dataMap.find(device); if(iter != m_dataMap.end()) { error += tr("重复添加!\n"); continue; } //< 添加第一列数据(设备描述) QString deviceName = DevNameList[i]; device = queryGetGroupDescription(device, objReader); //添加排序 device= QString("%1").arg(i++, 3, 10, QChar('0')) +"." +device; ST_RealData devData; devData.description = deviceName; devData.isInit = false; devData.type = TYPE_DESC; m_dataMap[device].append(devData); //< 添加点标签列数据 if(m_columnTagList.isEmpty()) { continue; } for(int nIndex(0); nIndex &pair = m_columnTagList[nIndex]; ST_RealData realData; realData.tag_name = device.mid(device.indexOf(".")+1) + "." + pair.first; realData.table_name = pair.second; realData.isInit = false; realData.type = TYPE_POINT; if(realData.table_name == "digital") { realData.stateTextName = queryDigitalStateText(realData.tag_name, objReader); } m_dataMap[device].append(realData); } } } else if(deviceOrGroupShowType == 2) //行标题按设备名显示-->2 { foreach (QString point, pointList) { //< 检查标签是否合法 QStringList list = point.split("."); if(list.length() != 7) { error += tr("测点标签不合法!\n"); continue; } //< 检查是否重复添加 QString device =list[3] + "." + list[4].split("_")[0]; //kxg.KXG1Meter1 QMap>::iterator iter = m_dataMap.find(device); if(iter != m_dataMap.end()) { error += tr("重复添加!\n"); continue; } //< 添加第一列数据(设备描述) QString valueType = list[5]; device = queryGetDevInfoTagName(valueType, device, objReader); iot_dbms::CDbApi descriptionReader(DB_CONN_MODEL_READ); if(!descriptionReader.open()) { return tr("数据库连接打开失败!"); } QString deviceName = queryGetDevInfoDescription(device, descriptionReader); //添加排序 device= QString("%1").arg(i++, 3, 10, QChar('0')) +"." +device; ST_RealData devData; devData.description = deviceName; devData.isInit = false; devData.type = TYPE_DESC; m_dataMap[device].append(devData); //< 添加点标签列数据 if(m_columnTagList.isEmpty()) { continue; } for(int nIndex(0); nIndex &pair = m_columnTagList[nIndex]; ST_RealData realData; realData.tag_name = device.mid(device.indexOf(".")+1) + "." + pair.first; realData.table_name = pair.second; realData.isInit = false; realData.type = TYPE_POINT; if(realData.table_name == "digital") { realData.stateTextName = queryDigitalStateText(realData.tag_name, objReader); } m_dataMap[device].append(realData); } } } m_pTableModel->updateRealData(m_dataMap); // m_pTableModel->sort(1,Qt::AscendingOrder); return error; } QString CDevSpePointWidget::addColumn(const QString &title, const QString &pointTag) { if(pointTag.isEmpty()) { return tr("测点标签为空!"); } iot_dbms::CDbApi objReader(DB_CONN_MODEL_READ); if(!objReader.open()) { return tr("数据库连接打开失败!"); } QStringList titleList = title.split(","); QStringList pointList = pointTag.split(","); if(titleList.size() != pointList.size()) { return tr("传入参数个数不一致!"); } QString error = QString(); if(deviceOrGroupShowType == 0 || deviceOrGroupShowType == 2) { for(int i(0); i < pointList.length(); i++) { //< 检查标签是否合法 QStringList list = QString(pointList[i]).split("."); if(list.length() != 7) { error += tr("测点标签不合法!\n"); continue; } //< 添加列头 QString table = list[2]; QString tag = list[5]; m_columnTagList.append(qMakePair(tag, table)); m_columnNameList.append(titleList[i]); m_pTableModel->setHeader(m_columnNameList); //< 添加点标签列数据 QStringList devList = m_dataMap.keys(); if(devList.isEmpty()) { continue; } for(int nIndex(0); nIndex(tag, table)); //VA、analog m_columnNameList.append(titleList[i]); //列标题栏 m_pTableModel->setHeader(m_columnNameList); //< 添加点标签列数据 QStringList devList = m_dataMap.keys(); //000.S12.6102", "001.S12.6342", "002.S12.6343", "003.S12.6344", "004.S12.6345", "005.S12.6346", "006.S12.6111 if(devList.isEmpty()) { continue; } int groupNum = 0; for(int nIndex(0); nIndex(tag, table)); m_columnNameList.append(titleList[i]); m_pTableModel->setHeader(m_columnNameList); //< 添加点标签列数据 QStringList devList = m_dataMap.keys(); if(devList.isEmpty()) { continue; } for(int nIndex(0); nIndexupdateRealData(m_dataMap); return error; } void CDevSpePointWidget::subscribe() { qDebug() << "subscribe start!"; if(m_pDpcdaForApp == Q_NULLPTR) { return; } m_pDpcdaForApp->unsubscribeAll(); QMap>::const_iterator iter = m_dataMap.cbegin(); for(; iter != m_dataMap.cend(); iter++) { const QList &list = iter.value(); foreach (const ST_RealData &data, list) { qDebug() << "subscribe data-->" << data.table_name << data.tag_name; if(data.type != TYPE_POINT) { continue; } if(data.tag_name.isEmpty() || data.table_name.isEmpty()) { continue; } m_pDpcdaForApp->subscribe(data.table_name.toStdString(), data.tag_name.toStdString(), "value"); m_pDpcdaForApp->subscribe(data.table_name.toStdString(), data.tag_name.toStdString(), "status"); qDebug() << "subscribe-->" << data.table_name << data.tag_name; } } } void CDevSpePointWidget::unsubscribeAll() { if(m_pDpcdaForApp) { m_pDpcdaForApp->unsubscribeAll(); } } void CDevSpePointWidget::setRowHeight(int height) { for(int nIndex(0); nIndexrowCount(); nIndex++) { m_pTableView->setRowHeight(nIndex, height); } } void CDevSpePointWidget::setColumnWidth(int column, int width) { for(int nIndex(0); nIndexrowCount(); nIndex++) { m_pTableView->setColumnWidth(column, width); } } void CDevSpePointWidget::setValidString(const QString &text) { if(m_pTableModel) { m_pTableModel->setValidString(text); } } void CDevSpePointWidget::setColumnStateText(int column, const QString &stateText) { QStringList list = stateText.split(","); if((list.length() % 2) != 0) { return; } QMap map; double key; QString value; for(int n = 0; n < list.length(); ++n) { key = QString(list[n++]).toDouble(); value = list[n]; map[key] = value; } m_pTableModel->addColStateTextMap(column, map); } void CDevSpePointWidget::slotUpdateAi(const QMap > &aiMap) { QMap >::const_iterator iter = aiMap.constBegin(); for(; iter != aiMap.constEnd(); iter++) { QMap>::iterator dIter = m_dataMap.begin(); for(; dIter != m_dataMap.end(); dIter++) { QList &dataList = dIter.value(); for(int nIndex(0); nIndexupdateRealValue(m_dataMap); } void CDevSpePointWidget::slotUpdateDi(const QMap > &diMap) { QMap >::const_iterator iter = diMap.constBegin(); for(; iter != diMap.constEnd(); iter++) { QMap>::iterator dIter = m_dataMap.begin(); for(; dIter != m_dataMap.end(); dIter++) { QList &dataList = dIter.value(); for(int nIndex(0); nIndexupdateRealValue(m_dataMap); } void CDevSpePointWidget::slotUpdatePi(const QMap > &piMap) { QMap >::const_iterator iter = piMap.constBegin(); for(; iter != piMap.constEnd(); iter++) { QMap>::iterator dIter = m_dataMap.begin(); for(; dIter != m_dataMap.end(); dIter++) { QList &dataList = dIter.value(); for(int nIndex(0); nIndexupdateRealValue(m_dataMap); } void CDevSpePointWidget::slotUpdateMi(const QMap > &miMap) { QMap >::const_iterator iter = miMap.constBegin(); for(; iter != miMap.constEnd(); iter++) { QMap>::iterator dIter = m_dataMap.begin(); for(; dIter != m_dataMap.end(); dIter++) { QList &dataList = dIter.value(); for(int nIndex(0); nIndexupdateRealValue(m_dataMap); } void CDevSpePointWidget::initialize() { m_pTableView = new QTableView; m_pTableView->horizontalHeader()->setStretchLastSection(true); m_pTableView->setSelectionMode(QAbstractItemView::NoSelection); m_pTableView->setEditTriggers(QAbstractItemView::NoEditTriggers); m_pTableView->setAlternatingRowColors(true); m_pTableModel = new CRealTableModel; m_pTableView->setModel(m_pTableModel); QGridLayout *layout = new QGridLayout; layout->addWidget(m_pTableView); layout->setMargin(0); setLayout(layout); if(m_isEditMode) { return; } initStyle(); qRegisterMetaType>>("QMap>"); qRegisterMetaType>>("QMap>"); qRegisterMetaType>>("QMap>"); m_pDpcdaForApp = new iot_service::CDpcdaForApp(); connect(CRealDataCollect::instance(), &CRealDataCollect::signal_updateAi, this, &CDevSpePointWidget::slotUpdateAi); connect(CRealDataCollect::instance(), &CRealDataCollect::signal_updateDi, this, &CDevSpePointWidget::slotUpdateDi); connect(CRealDataCollect::instance(), &CRealDataCollect::signal_updateMi, this, &CDevSpePointWidget::slotUpdateMi); connect(CRealDataCollect::instance(), &CRealDataCollect::signal_updatePi, this, &CDevSpePointWidget::slotUpdatePi); } void CDevSpePointWidget::initStyle() { QString qss = QString(); std::string strFullPath = iot_public::CFileStyle::getPathOfStyleFile("public.qss"); qDebug() << "strFullPath-->" << QString::fromStdString(strFullPath); QFile qssfile1(QString::fromStdString(strFullPath)); qssfile1.open(QFile::ReadOnly); if (qssfile1.isOpen()) { qDebug() << "load public.qss"; qss += QLatin1String(qssfile1.readAll()); qssfile1.close(); } qssfile1.close(); std::string style = iot_public::CFileStyle::getPathOfStyleFile("devSpePoint.qss") ; qDebug() << "Style Path-->" << QString::fromStdString(style); QFile file(QString::fromStdString(style)); file.open(QFile::ReadOnly); if (file.isOpen()) { setStyleSheet(QLatin1String(file.readAll())); file.close(); qDebug() << "load devSpePoint.qss"; } } QString CDevSpePointWidget::queryDeviceDesc(const QString &devTag, iot_dbms::CDbApi &objReader) const { if(!objReader.isOpen()) { return QString(); } QList listColName; listColName.append("DESCRIPTION"); iot_dbms::CDbCondition objCondition; objCondition.m_sColName = "TAG_NAME"; objCondition.m_value = devTag; objCondition.m_eCompare = iot_dbms::CDbCondition::COMPARE_EQ; objCondition.m_eLogic = iot_dbms::CDbCondition::LOGIC_AND; QSqlQuery objQuery; if(objReader.select("dev_info", listColName, objCondition, objQuery)) { while(objQuery.next()) { return objQuery.value(0).toString(); } } return QString(); } QString CDevSpePointWidget::queryDigitalStateText(const QString &point, iot_dbms::CDbApi &objReader) const { if(!objReader.isOpen()) { return QString(); } QList listColName; listColName.append("STATE_TEXT_NAME"); iot_dbms::CDbCondition objCondition; objCondition.m_sColName = "TAG_NAME"; objCondition.m_value = point; objCondition.m_eCompare = iot_dbms::CDbCondition::COMPARE_EQ; objCondition.m_eLogic = iot_dbms::CDbCondition::LOGIC_AND; QSqlQuery objQuery; if(objReader.select("digital", listColName, objCondition, objQuery)) { while(objQuery.next()) { return objQuery.value(0).toString(); } } return QString(); } //获取设备组名,仅deviceOrGroupType==1时使用 QString CDevSpePointWidget::queryGetGroupDescription(const QString &tagName, iot_dbms::CDbApi &objReader) const { if(!objReader.isOpen()) { return QString(); } QList listColName; listColName.append("DESCRIPTION"); //需要取的值 iot_dbms::CDbCondition objCondition; objCondition.m_sColName = "TAG_NAME"; //比较的组名 objCondition.m_value = tagName; // 比较的值 objCondition.m_eCompare = iot_dbms::CDbCondition::COMPARE_EQ; // 比较条件 objCondition.m_eLogic = iot_dbms::CDbCondition::LOGIC_AND; // 两个比较条件之间的关系 QSqlQuery objQuery; if(objReader.select("dev_group", listColName, objCondition, objQuery)) { while(objQuery.next()) { return objQuery.value(0).toString(); } } return QString(); } //获取设备组里第1个存在的列标题值的设备名,仅deviceOrGroupType==1时使用 QString CDevSpePointWidget::queryGetCollumnDevInfoTagName(const QString &measureType, const QString &valueType, const QString &groupName, iot_dbms::CDbApi &objReader) const { if(!objReader.isOpen()) { return QString(); } QString mysqlExecute; mysqlExecute = QString("SELECT %1.TAG_NAME FROM %2 JOIN dev_info ON dev_info.TAG_NAME = %3.DEVICE WHERE dev_info.GROUP_TAG_NAME = '%4'") .arg(measureType).arg(measureType).arg(measureType).arg(groupName); QSqlQuery objQuery; if(objReader.execute(mysqlExecute, objQuery)) { qDebug() << "queryGetCollumnDevInfoTagName"; while(objQuery.next()) { qDebug() << "queryGetCollumnDevInfoTagName-->" << objQuery.value(0).toString(); if(objQuery.value(0).toString().contains(valueType)) { return objQuery.value(0).toString(); } } } return QString(); } //以第1个存在VA值的设备名为列标题时,仅deviceOrGroupType==2时使用 QString CDevSpePointWidget::queryGetDevInfoTagName(const QString &valueType, const QString &groupTagName, iot_dbms::CDbApi &objReader) const { if(!objReader.isOpen()) { return QString(); } QString mysqlExecute; mysqlExecute = QString("SELECT analog.TAG_NAME FROM analog JOIN dev_info ON analog.DEVICE = dev_info.TAG_NAME WHERE dev_info.GROUP_TAG_NAME = '%1'").arg(groupTagName); QSqlQuery objQuery; if(objReader.execute(mysqlExecute, objQuery)) { while(objQuery.next()) { qDebug() << "queryGetGroupDescription-->" << objQuery.value(0).toString(); if(objQuery.value(0).toString().contains(valueType)) { return objQuery.value(0).toString().replace("." + valueType, ""); } } } return QString(); } //获取某组设备里的设备名,仅deviceOrGroupType==2时使用 QString CDevSpePointWidget::queryGetDevInfoDescription(const QString &deviceTagName, iot_dbms::CDbApi &objReader) const { if(!objReader.isOpen()) { return QString(); } QList listColName; listColName.append("DESCRIPTION"); //是objCondition.m_value的组名 iot_dbms::CDbCondition objCondition; objCondition.m_sColName = "TAG_NAME"; //比较的字段名 objCondition.m_value = deviceTagName; //比较的值 objCondition.m_eCompare = iot_dbms::CDbCondition::COMPARE_EQ; //比较条件 objCondition.m_eLogic = iot_dbms::CDbCondition::LOGIC_AND; //两个比较条件之间的关系 QSqlQuery objQuery; if(objReader.select("dev_info", listColName, objCondition, objQuery)) { while(objQuery.next()) { return objQuery.value(0).toString(); } } return QString(); }