2012-01-24 31 views
1

我收到的字符串作为这个功能的XML文档与QDomDocument对象读取字符串作为XML:如何在QT

void HttpWindow::replyFinished(QNetworkReply *reply) 
{ 
    QString data = reply->readAll().trimmed(); 
    bool value=document->setContent(&data); 
} 

,这里是我的插槽和信号:

connect(reply, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); 

当我把上面的代码我得到的错误,没有预先定义的函数接收一个字符串,因为我已经发表了...可以somone试图纠正这个,所以我可以看到如何把这个Qstring值放入xml文档。因此,我可以读取XML

谢谢

编辑: 这些都是我必须选择的功能,我已经尝试了所有,但似乎我不发送正确paremeters:

// Qt extensions 
    bool setContent(const QByteArray& text, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0); 
    bool setContent(const QString& text, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0); 
    bool setContent(QIODevice* dev, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0); 
    bool setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0); 
    bool setContent(const QByteArray& text, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0); 
    bool setContent(const QString& text, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0); 
    bool setContent(QIODevice* dev, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0); 
    bool setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0); 

编辑2: 我不能编译它,我可以给你这样的代码:

httpwindow.cpp: In member function 'void HttpWindow::replyFinished(QNetworkReply*)': 
httpwindow.cpp:140: error: no matching function for call to 'QDomDocument::setContent(QString*)' 
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:343: note: candidates are: bool QDomDocument::setContent(const QByteArray&, bool, QString*, int*, int*) 
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:344: note:     bool QDomDocument::setContent(const QString&, bool, QString*, int*, int*) 
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:345: note:     bool QDomDocument::setContent(QIODevice*, bool, QString*, int*, int*) 
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:346: note:     bool QDomDocument::setContent(QXmlInputSource*, bool, QString*, int*, int*) 
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:347: note:     bool QDomDocument::setContent(const QByteArray&, QString*, int*, int*) 
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:348: note:     bool QDomDocument::setContent(const QString&, QString*, int*, int*) 
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:349: note:     bool QDomDocument::setContent(QIODevice*, QString*, int*, int*) 
..\..\..\..\Desktop\Qt\4.7.4\mingw\include/QtXml/qdom.h:350: note:     bool QDomDocument::setContent(QXmlInputSource*, QXmlReader*, QString*, int*, int*) 

或者告诉我怎样做才能拿到Qdebug输出。你的意思是像Qdebug<<data

+0

你能发布“数据”调试输出吗 – Neox

回答

3

确实没有QDomDocument :: setContent()接受QString指针的重载,通过值传递将修复错误。

但是在你的代码中存在另一个严重的问题,那就是你试图从QByteArray(readAll()的结果)转换为QString。这不仅是不必要的,而且是危险的,因为转换是在假设内容为ascii的情况下完成的。你可以调用document-> setContent(reply)。

+0

'document-> setContent(reply)'似乎不起作用。我得到错误:**错误:请求成员'setContent'in'((HttpWindow *)this) - > HttpWindow :: document',它是非类类型的'QDomDocument *'**,这是我的声明.h文件中的QDomDocument:'QDomDocument * document;' – Denonth

+0

这看起来好像没有用于QDomDocument的include,但很难说没有完整的代码。 –

+0

尝试使用QDomDocument文档; (没有指针)。不需要在堆上创建QDom对象。 –