Hallo,
ich denke mal, ohne jemanden zu "erschlagen", dass Dich das Beispiel weiterbringen wird:
Code: Alles auswählen
XmlDom::XmlDom(QApplication *papp, QString sActFile, QString sApplication){
mx.lock();
app = papp;
ActXmlFile = app->applicationDirPath();
QStringList ls = sActFile.split("/");
ActXmlFile += "/" + ls[ls.count()-1] + ".xml";
AppName = sApplication;
QFile fil(ActXmlFile);
if(!fil.exists()){
fil.open(QIODevice::WriteOnly);
QTextStream out(&fil);
out.setCodec("UTF-8");
out << "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
<< "<!DOCTYPE tttt>\n"
<< "<tttt version=\"1.0\" >\n</tttt>";
fil.close();
}
fil.close();
mx.unlock();
isopen=false;
};
Dieser Konstruktor versucht ein XML-File zu öffnen. Wenn nicht gefunden,
legt er einfach eine Neue an
Die Klasse selbst ist so definiert (falls etwas unklar da oben wäre). Im Falle Interesse an einem richtigen (XML)DOM-Dokument besteht. Diese Klasse hier ist wirklich extrem schnell
Code: Alles auswählen
#ifndef mDOM_H
#define mDOM_H
#include <QObject>
#include <QMap>
#include <QThreadStorage>
#include <QDomDocument>
#include <QMutex>
class QString;
class QFile;
class QDomElement;
class QApplication;
class QColor;
class QDomNamedNodeMap;
class XmlDom : public QObject {
Q_OBJECT
private:
QDomDocument doc;
QString ActXmlFile;
QApplication *app;
QMutex mx;
QDomElement mainE;
QString AppName;
bool isopen;
//Templates
QThreadStorage<QMap<QString, QString>*> cache;
//private Functions
QDomElement findElement (QString, QString, QString, int);
QString GetRowName (int);
QString GetColName (int);
void AddRowAttribute (QDomElement);
void AddColAttribute (QDomElement);
void insertIntoCache (QString, QString);
void removeFromCache (QString);
QString readFromCache (QString);
void changeColRow (QString, int);
public slots:
void changeRowAttr (QString);
void changeColAttr (QString);
void renameTable (QString, QString);
void delTable (QString);
void delRow (QString, int);
void delCol (QString, int, int);
void clearCache ();
signals:
void docloaded ();
void docsaved ();
void docerror (QString, int , int);
void rowerror (QString, int);
void colerror (QString, int, int);
void rowchanged (QString, int);
void colchanged (QString, int, int);
void rowremoved (QString, int);
void colremoved (QString, int, int);
void rowadded (QString, int);
void coladded (QString, int, int);
void docbeforeload ();
void docbeforesave ();
public:
XmlDom (QApplication*, QString, QString);
QString GetXmlName () { return ActXmlFile; };
QString GetAppName () { return AppName; };
bool AddTable (QString);
bool AddRow (QString, int);
bool AddCol (QString, int, int);
void setTabName (QString);
void setRowID (int);
void setRowPos (int);
void setRowHeight (int);
void setAlign (int);
void setRow (int);
void setWidth (int);
void setFont (QString);
void setBackcolor (QColor);
void setForecolor (QColor);
void setFramecolor (QColor);
void setColID (int);
bool isTableExist (QString);
bool isRowExist (QString, int);
bool isColExist (QString, int, int);
void saveDOM ();
void openDOM ();
};
#endif
eine etwas umfangreiche Geschichte, weshalb der og. Konstruktor insbesondere fruchten wird
