Seite 1 von 1

QtXML funktioniert nicht

Verfasst: 20. Februar 2006 16:57
von sub.one
Ich hab eben versuch mit QXML ein XML Datei zu erzeugen. Dabei gab es immer wieder Fehlermeldungen. Nun habe ich versucht das Standardbeispiel aus der Dokumentation übersetzen zu lassen (DOM-Bookmarks). Hier krieg ich die Fehlermeldung "QDomDocument. No such file or directory". In den Includes steht der Ordner QtXml mit drin. Aber in dem Ordner befindet sich keine QDomDocument.h, daher auch der Fehler. Ich hatte damals qt-win-opensource-4.1.0-mingw.exe heruntergeladen. Ist da QtXML noch nicht kompiliert oder wieso fehler mir sämtliche *.h Dateien bzg. XML?

Verfasst: 20. Februar 2006 17:12
von sub.one

Code: Alles auswählen


#include <QtXml/QDomDocument>
#include <QtGui/QtGui>

int main(int argc, char* argv[]){
    
    QDomDocument x("Bla");
    return 0;
}


gibt bei mir folgende Fehlermeldung:

Code: Alles auswählen

  [Linker error] undefined reference to `_imp___ZN12QDomDocumentC1ERK7QString' 
  [Linker error] undefined reference to `_imp___ZN12QDomDocumentD1Ev' 
  ld returned 1 exit status 
 C:\Dokumente und Einstellungen\nobody\Desktop\domtest\Makefile.Release [Build Error]  [release\domtest.exe] Error 1 

was ist darunter zu verstehen? Weiß jemand wo das Problem liegt?

Verfasst: 20. Februar 2006 17:22
von Christian81
CONFIG += xml
Siehe auch Doku: http://doc.trolltech.com/4.1/qtxml.html

Verfasst: 20. Februar 2006 20:41
von Querdenker
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 :)