如何以QString为成员变量初始化QXMLStreamWriter

How to initialize QXmlStreamWriter with QString as member variable?

本文关键字:变量 初始化 QXMLStreamWriter 成员 QString      更新时间:2023-10-16

我已经实现了自己的XML作者来生成XML作为QString。

我使用私有成员变量为QXMLStreamWriter创建了一个" myxmlWriter"类,并尝试在公共方法WriteToString((

中初始化它

在声明标题文件中:

class MyXmlWriter {
  public:
    MyXmlWriter();
    ~MyXmlWriter();
    QString writeToString();
  private:
    QXmlStreamWriter writer;
    void writePart();
}

在CPP文件中:

void MyXmlWriter::writePart() {
   // i want to use the QXmlStreamWriter instance hier
}
QString MyXmlWriter::writeToString(){
   QString result;
   writer(&result); // at this became the error: no match for call to '(QXmlStreamWriter) (QString*)'
   xmlWriter.setAutoFormatting(true);
   // private method called 
   writePart();
   return result;
}

此错误出现在构建中:错误:与(qxmlStreamWriter((qString (writer(& resust(无匹配。*

如果在本地方法 writeToString((中声明 qxmlStreamWriter Writer ,那么我无法访问私有方法中的作者 writepart(( 我想在其他方法中使用成员变量"作者",这就是为什么本地声明对我来说不是一个选择。

您必须为变量writer分配一个新对象,如以下:

QString MyXmlWriter::writeToString() {
    QString result;
    writer = QXmlStreamWriter(&result);  // will not compile
    return result;
}

此代码很危险。 resultwriteToString()的末尾被破坏,因此writer然后包含无效的数据,您不能再使用它。

此外,QXmlStreamWriter无法复制,因此这可能根本不会编译。最好将QXmlStreamWriter传递给您的方法,例如:

class MyXmlWriter {
  public:
    MyXmlWriter();
    ~MyXmlWriter();
    QString writeToString();
  private:
    void writePart(QXmlStreamWriter &writer);
}

QString MyXmlWriter::writeToString() {
    QString result;
    QXmlStreamWriter writer(&result);
    writePart(writer);
    writePart(writer);
    return result;
}