From 8bb30a0940266c0e51debbc8be91d7cf1bec7a5e Mon Sep 17 00:00:00 2001 From: "facat@lab.com" Date: Mon, 24 Nov 2014 22:01:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8D=E6=98=AF=E7=94=A8QStringRef=EF=BC=8C?= =?UTF-8?q?=E5=A4=AA=E5=AE=B9=E6=98=93=E5=87=BA=E9=94=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: facat@lab.com --- testHasttable/BasicElementInfo.cpp | 21 ++++-- testHasttable/BasicElementInfo.h | 13 ++-- testHasttable/aclinesegment.cpp | 2 +- testHasttable/aclinesegment.h | 2 +- testHasttable/breaker.cpp | 8 +-- testHasttable/breaker.h | 8 +-- testHasttable/busbarsection.cpp | 8 ++- testHasttable/busbarsection.h | 4 +- testHasttable/compensator.cpp | 4 +- testHasttable/compensator.h | 4 +- testHasttable/disconnector.cpp | 8 +-- testHasttable/disconnector.h | 8 +-- testHasttable/elementhashtable.cpp | 64 +++++++++++++++---- testHasttable/elementhashtable.h | 3 +- testHasttable/main.cpp | 2 + .../object_script.testHasttable.Debug | 1 + .../object_script.testHasttable.Release | 1 + testHasttable/powertransformer.cpp | 8 +-- testHasttable/powertransformer.h | 8 +-- testHasttable/synchronousmachine.cpp | 4 +- testHasttable/synchronousmachine.h | 4 +- testHasttable/terminal.cpp | 6 +- testHasttable/terminal.h | 6 +- testHasttable/testHasttable.pro | 2 +- 24 files changed, 128 insertions(+), 71 deletions(-) diff --git a/testHasttable/BasicElementInfo.cpp b/testHasttable/BasicElementInfo.cpp index cd45149..1b08039 100644 --- a/testHasttable/BasicElementInfo.cpp +++ b/testHasttable/BasicElementInfo.cpp @@ -1,7 +1,7 @@ #include "BasicElementInfo.h" -//#include -BasicElementInfo::BasicElementInfo() +#include +BasicElementInfo::BasicElementInfo(QObject *parent) { } @@ -12,6 +12,16 @@ bool BasicElementInfo::derivedParse(QXmlStreamReader& reader) return true; } +QString BasicElementInfo::getID() +{ + return this->id; +} + +QString BasicElementInfo::getName() +{ + return this->name; +} + bool BasicElementInfo::parse(QXmlStreamReader &reader) { return true; @@ -19,10 +29,11 @@ bool BasicElementInfo::parse(QXmlStreamReader &reader) bool BasicElementInfo::parseBasicInfo(QXmlStreamReader &reader) { - // std::cout<<"father"<<"\n"; QStringRef elementName; QStringRef id; elementName=reader.name(); + this->name=elementName.toString(); + this->id=id.toString(); qDebug()<derivedParse(reader); if(reader.isEndElement() && reader.name()==elementName) { break; } } - - this->name=elementName; - this->id=id; return true; } diff --git a/testHasttable/BasicElementInfo.h b/testHasttable/BasicElementInfo.h index 04f1ffb..abecbb7 100644 --- a/testHasttable/BasicElementInfo.h +++ b/testHasttable/BasicElementInfo.h @@ -2,19 +2,22 @@ #define BASICELEMENTINFO_H #include -#include #include #include +#include class BasicElementInfo; //typedef bool (BasicElementInfo::*derivedParseHandle)(QXmlStreamReader &reader); -class BasicElementInfo{ +class BasicElementInfo:public QObject{ + Q_OBJECT public: - BasicElementInfo(); + explicit BasicElementInfo(QObject *parent = 0); virtual bool parse(QXmlStreamReader &reader); + QString getID(); + QString getName(); protected: bool parseBasicInfo(QXmlStreamReader &reader); - QStringRef name; - QStringRef id; + QString name; + QString id; // derivedParseHandle derivedParse; virtual bool derivedParse(QXmlStreamReader &reader); diff --git a/testHasttable/aclinesegment.cpp b/testHasttable/aclinesegment.cpp index d8d9159..d2cd1d0 100644 --- a/testHasttable/aclinesegment.cpp +++ b/testHasttable/aclinesegment.cpp @@ -1,6 +1,6 @@ #include "aclinesegment.h" -ACLineSegment::ACLineSegment():isTerminalA(true) +ACLineSegment::ACLineSegment(QObject *parent):BasicElementInfo(parent),isTerminalA(true) { } diff --git a/testHasttable/aclinesegment.h b/testHasttable/aclinesegment.h index 1e8438a..5721d4b 100644 --- a/testHasttable/aclinesegment.h +++ b/testHasttable/aclinesegment.h @@ -4,7 +4,7 @@ class ACLineSegment:public BasicElementInfo { public: - ACLineSegment(); + explicit ACLineSegment(QObject *parent = 0); virtual bool parse(QXmlStreamReader &reader); protected: QStringRef terminalA; diff --git a/testHasttable/breaker.cpp b/testHasttable/breaker.cpp index d5f0735..5fe8f63 100644 --- a/testHasttable/breaker.cpp +++ b/testHasttable/breaker.cpp @@ -1,6 +1,6 @@ #include "breaker.h" -Breaker::Breaker() +Breaker::Breaker(QObject *parent):BasicElementInfo(parent) { } @@ -10,7 +10,7 @@ bool Breaker::derivedParse(QXmlStreamReader &reader) { QString terminal; terminal=reader.attributes().value("rdf:resource").toString(); - this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->terminalA=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalA<<"\n"; this->isTerminalA=false; } @@ -18,14 +18,14 @@ bool Breaker::derivedParse(QXmlStreamReader &reader) { QString terminal; terminal=reader.attributes().value("rdf:resource").toString(); - this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->terminalB=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalB<<"\n"; } if("Equipment.MemberOf_EquipmentContainer"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) { QString ss; ss=reader.attributes().value("rdf:resource").toString(); - this->equipmentContainer=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->equipmentContainer=ss.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<equipmentContainer<<"\n"; } return true; diff --git a/testHasttable/breaker.h b/testHasttable/breaker.h index 671c034..9d1ea96 100644 --- a/testHasttable/breaker.h +++ b/testHasttable/breaker.h @@ -5,12 +5,12 @@ class Breaker:public BasicElementInfo { public: - Breaker(); + explicit Breaker(QObject *parent = 0); virtual bool parse(QXmlStreamReader& reader); protected: - QStringRef terminalA; - QStringRef terminalB; - QStringRef equipmentContainer; + QString terminalA; + QString terminalB; + QString equipmentContainer; virtual bool derivedParse(QXmlStreamReader& reader); private: bool isTerminalA; diff --git a/testHasttable/busbarsection.cpp b/testHasttable/busbarsection.cpp index c597396..8903974 100644 --- a/testHasttable/busbarsection.cpp +++ b/testHasttable/busbarsection.cpp @@ -1,6 +1,6 @@ #include "busbarsection.h" - -BusbarSection::BusbarSection() +#include +BusbarSection::BusbarSection(QObject *parent):BasicElementInfo(parent) { } @@ -11,7 +11,7 @@ bool BusbarSection::derivedParse(QXmlStreamReader& reader) { QString terminal; terminal=reader.attributes().value("rdf:resource").toString(); - this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->terminal=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminal<<"\n"; } return true; @@ -19,5 +19,7 @@ bool BusbarSection::derivedParse(QXmlStreamReader& reader) bool BusbarSection::parse(QXmlStreamReader& reader) { +// std::cout<<"BusbarSection"<parseBasicInfo(reader); + } diff --git a/testHasttable/busbarsection.h b/testHasttable/busbarsection.h index c72b2ae..e06d02d 100644 --- a/testHasttable/busbarsection.h +++ b/testHasttable/busbarsection.h @@ -5,10 +5,10 @@ class BusbarSection:public BasicElementInfo { public: - BusbarSection(); + explicit BusbarSection(QObject *parent = 0); virtual bool parse(QXmlStreamReader& reader); protected: - QStringRef terminal; + QString terminal; virtual bool derivedParse(QXmlStreamReader& reader); }; diff --git a/testHasttable/compensator.cpp b/testHasttable/compensator.cpp index baaab28..48c5a4b 100644 --- a/testHasttable/compensator.cpp +++ b/testHasttable/compensator.cpp @@ -1,6 +1,6 @@ #include "compensator.h" -Compensator::Compensator() +Compensator::Compensator(QObject *parent):BasicElementInfo(parent) { } @@ -11,7 +11,7 @@ bool Compensator::derivedParse(QXmlStreamReader &reader) { QString terminal; terminal=reader.attributes().value("rdf:resource").toString(); - this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->terminal=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminal<<"\n"; } return true; diff --git a/testHasttable/compensator.h b/testHasttable/compensator.h index 1a18b3a..73f2b95 100644 --- a/testHasttable/compensator.h +++ b/testHasttable/compensator.h @@ -5,12 +5,12 @@ class Compensator:public BasicElementInfo { public: - Compensator(); + explicit Compensator(QObject *parent = 0); virtual bool parse(QXmlStreamReader& reader); protected: virtual bool derivedParse(QXmlStreamReader& reader); private: - QStringRef terminal; + QString terminal; }; #endif // COMPENSATOR_H diff --git a/testHasttable/disconnector.cpp b/testHasttable/disconnector.cpp index a874180..a01acc4 100644 --- a/testHasttable/disconnector.cpp +++ b/testHasttable/disconnector.cpp @@ -1,6 +1,6 @@ #include "disconnector.h" -Disconnector::Disconnector() +Disconnector::Disconnector(QObject *parent):BasicElementInfo(parent) { } @@ -11,7 +11,7 @@ bool Disconnector::derivedParse(QXmlStreamReader &reader) { QString terminal; terminal=reader.attributes().value("rdf:resource").toString(); - this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->terminalA=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalA<<"\n"; this->isTerminalA=false; } @@ -19,14 +19,14 @@ bool Disconnector::derivedParse(QXmlStreamReader &reader) { QString terminal; terminal=reader.attributes().value("rdf:resource").toString(); - this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->terminalB=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalB<<"\n"; } if("Equipment.MemberOf_EquipmentContainer"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) { QString ss; ss=reader.attributes().value("rdf:resource").toString(); - this->equipmentContainer=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->equipmentContainer=ss.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<equipmentContainer<<"\n"; } return true; diff --git a/testHasttable/disconnector.h b/testHasttable/disconnector.h index 96e7aff..7069cb2 100644 --- a/testHasttable/disconnector.h +++ b/testHasttable/disconnector.h @@ -5,12 +5,12 @@ class Disconnector:public BasicElementInfo { public: - Disconnector(); + explicit Disconnector(QObject *parent = 0); virtual bool parse(QXmlStreamReader& reader); protected: - QStringRef terminalA; - QStringRef terminalB; - QStringRef equipmentContainer; + QString terminalA; + QString terminalB; + QString equipmentContainer; virtual bool derivedParse(QXmlStreamReader& reader); private: bool isTerminalA; diff --git a/testHasttable/elementhashtable.cpp b/testHasttable/elementhashtable.cpp index 5b8aae2..095ddb5 100644 --- a/testHasttable/elementhashtable.cpp +++ b/testHasttable/elementhashtable.cpp @@ -11,52 +11,88 @@ bool ElementHashtable::child(QXmlStreamReader &reader) QStringRef elementName; elementName=reader.name(); + QString id; + if(reader.attributes().hasAttribute("rdf:ID")) + { + id=reader.attributes().value("rdf:ID").toString(); + } BasicElementInfo *pointer=NULL; if(elementName=="BusbarSection") { - pointer=new BusbarSection; + pointer=new BusbarSection(this); pointer->parse(reader); } if(elementName=="Terminal") { - pointer=new Terminal; + pointer=new Terminal(this); pointer->parse(reader); } if(elementName=="ACLineSegment") { - pointer=new ACLineSegment; + pointer=new ACLineSegment(this); pointer->parse(reader); } if(elementName=="Breaker") { - pointer=new Breaker; + pointer=new Breaker(this); pointer->parse(reader); } if(elementName=="Compensator") { - pointer=new Compensator; + pointer=new Compensator(this); pointer->parse(reader); } if(elementName=="Disconnector") { - pointer=new Disconnector; + pointer=new Disconnector(this); pointer->parse(reader); } if(elementName=="PowerTransformer") { - pointer=new PowerTransformer; + pointer=new PowerTransformer(this); pointer->parse(reader); } if(elementName=="SynchronousMachine") { - pointer=new SynchronousMachine; + pointer=new SynchronousMachine(this); pointer->parse(reader); } - - if(pointer) + if(pointer && id!="") { - this->eleHT[elementName.toString()]=*pointer; + if(this->eleHT.contains(id)) + { + std::cout<<"contain"<eleHT[id]=pointer; +// std::cout<eleHT[id]->getName().toStdString()< &ht=this->eleHT; + QList keys; + keys=ht.keys(); + std::cout<::Iterator ite=keys.begin(); + ite!=keys.end(); + ite++) + { +// std::cout<toStdString()<getName().toStdString()<getName()=="BusbarSection") + { + std::cout<<"BusbarSection"<<"\n"; + } } return true; } @@ -78,15 +114,17 @@ bool ElementHashtable::parse(const QString& xmlPath) { continue; } - this->child(reader);//处理根元素下的第一级子元素,也就是Substation这一类。 } loop++; - if(loop>20){ + if(loop>600000){ // break; } } +// const QHash &ht=this->eleHT; +// std::cout<getName().toString().toStdString()< eleHT; + QHash eleHT; signals: public slots: diff --git a/testHasttable/main.cpp b/testHasttable/main.cpp index 03e465b..663ae95 100644 --- a/testHasttable/main.cpp +++ b/testHasttable/main.cpp @@ -7,6 +7,8 @@ int main(int argc, char *argv[]) QCoreApplication a(argc, argv); ElementHashtable eleReader; eleReader.parse("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml"); +// eleReader.parse("D:/Project/佛山项目/佛山收资/按元素分/BusbarSectionb.xml"); + eleReader.goPath(); // RegexExtract regexExt; // regexExt.extract("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml"); // regexExt.exportBlocks("ThermalGeneratingUnit.xml"); diff --git a/testHasttable/object_script.testHasttable.Debug b/testHasttable/object_script.testHasttable.Debug index e6972d8..a91cfd8 100644 --- a/testHasttable/object_script.testHasttable.Debug +++ b/testHasttable/object_script.testHasttable.Debug @@ -13,4 +13,5 @@ INPUT( ./debug/powertransformer.o ./debug/synchronousmachine.o ./debug/moc_elementhashtable.o +./debug/moc_BasicElementInfo.o ); diff --git a/testHasttable/object_script.testHasttable.Release b/testHasttable/object_script.testHasttable.Release index 917a919..a0273f1 100644 --- a/testHasttable/object_script.testHasttable.Release +++ b/testHasttable/object_script.testHasttable.Release @@ -13,4 +13,5 @@ INPUT( ./release/powertransformer.o ./release/synchronousmachine.o ./release/moc_elementhashtable.o +./release/moc_BasicElementInfo.o ); diff --git a/testHasttable/powertransformer.cpp b/testHasttable/powertransformer.cpp index 5b129de..02149fb 100644 --- a/testHasttable/powertransformer.cpp +++ b/testHasttable/powertransformer.cpp @@ -1,6 +1,6 @@ #include "powertransformer.h" -PowerTransformer::PowerTransformer() +PowerTransformer::PowerTransformer(QObject *parent):BasicElementInfo(parent) { } @@ -11,7 +11,7 @@ bool PowerTransformer::derivedParse(QXmlStreamReader &reader) { QString terminal; terminal=reader.attributes().value("rdf:resource").toString(); - this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->terminalA=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalA<<"\n"; this->isTerminalA=false; } @@ -19,14 +19,14 @@ bool PowerTransformer::derivedParse(QXmlStreamReader &reader) { QString terminal; terminal=reader.attributes().value("rdf:resource").toString(); - this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->terminalB=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminalB<<"\n"; } if("Equipment.MemberOf_EquipmentContainer"==reader.name() && reader.attributes().hasAttribute("rdf:resource")) { QString ss; ss=reader.attributes().value("rdf:resource").toString(); - this->equipmentContainer=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->equipmentContainer=ss.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<equipmentContainer<<"\n"; } return true; diff --git a/testHasttable/powertransformer.h b/testHasttable/powertransformer.h index a180101..0307d25 100644 --- a/testHasttable/powertransformer.h +++ b/testHasttable/powertransformer.h @@ -5,12 +5,12 @@ class PowerTransformer:public BasicElementInfo { public: - PowerTransformer(); + explicit PowerTransformer(QObject *parent = 0); virtual bool parse(QXmlStreamReader& reader); protected: - QStringRef terminalA; - QStringRef terminalB; - QStringRef equipmentContainer; + QString terminalA; + QString terminalB; + QString equipmentContainer; virtual bool derivedParse(QXmlStreamReader& reader); private: bool isTerminalA; diff --git a/testHasttable/synchronousmachine.cpp b/testHasttable/synchronousmachine.cpp index 0f2febb..524d200 100644 --- a/testHasttable/synchronousmachine.cpp +++ b/testHasttable/synchronousmachine.cpp @@ -1,6 +1,6 @@ #include "synchronousmachine.h" -SynchronousMachine::SynchronousMachine() +SynchronousMachine::SynchronousMachine(QObject *parent):BasicElementInfo(parent) { } @@ -10,7 +10,7 @@ bool SynchronousMachine::derivedParse(QXmlStreamReader &reader) { QString terminal; terminal=reader.attributes().value("rdf:resource").toString(); - this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->terminal=terminal.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"ConductingEquipment.Terminals "<terminal<<"\n"; } return true; diff --git a/testHasttable/synchronousmachine.h b/testHasttable/synchronousmachine.h index 09229c5..b203826 100644 --- a/testHasttable/synchronousmachine.h +++ b/testHasttable/synchronousmachine.h @@ -5,10 +5,10 @@ class SynchronousMachine:public BasicElementInfo { public: - SynchronousMachine(); + explicit SynchronousMachine(QObject *parent = 0); virtual bool parse(QXmlStreamReader& reader); protected: - QStringRef terminal; + QString terminal; virtual bool derivedParse(QXmlStreamReader& reader); }; diff --git a/testHasttable/terminal.cpp b/testHasttable/terminal.cpp index 68a5e07..ad91329 100644 --- a/testHasttable/terminal.cpp +++ b/testHasttable/terminal.cpp @@ -1,6 +1,6 @@ #include "terminal.h" -Terminal::Terminal() +Terminal::Terminal(QObject *parent):BasicElementInfo(parent) { } @@ -10,7 +10,7 @@ bool Terminal::derivedParse(QXmlStreamReader& reader) { QString cn; cn=reader.attributes().value("rdf:resource").toString(); - this->connectivityNode=cn.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->connectivityNode=cn.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"Terminal.ConnectivityNode "<connectivityNode<<"\n"; } @@ -18,7 +18,7 @@ bool Terminal::derivedParse(QXmlStreamReader& reader) { QString ce; ce=reader.attributes().value("rdf:resource").toString(); - this->conductingEquipment=ce.replace("#","").leftRef(-1);//返回整个字符串的Ref + this->conductingEquipment=ce.replace("#","").leftRef(-1).toString();//返回整个字符串的Ref qDebug()<<"got "<<"Terminal.ConductingEquipment "<conductingEquipment<<"\n"; } return true; diff --git a/testHasttable/terminal.h b/testHasttable/terminal.h index 1308a9a..ec54a1a 100644 --- a/testHasttable/terminal.h +++ b/testHasttable/terminal.h @@ -5,12 +5,12 @@ class Terminal:public BasicElementInfo { public: - Terminal(); + explicit Terminal(QObject *parent = 0); virtual bool parse(QXmlStreamReader& reader); protected: virtual bool derivedParse(QXmlStreamReader& reader); - QStringRef conductingEquipment; - QStringRef connectivityNode; + QString conductingEquipment; + QString connectivityNode; }; #endif // TERMINAL_H diff --git a/testHasttable/testHasttable.pro b/testHasttable/testHasttable.pro index c003937..24ec2e1 100644 --- a/testHasttable/testHasttable.pro +++ b/testHasttable/testHasttable.pro @@ -45,5 +45,5 @@ HEADERS += \ synchronousmachine.h #release{ -#DEFINES += QT_NO_DEBUG_OUTPUT +DEFINES += QT_NO_DEBUG_OUTPUT #}