QXmlStreamWriter如何初始化QString为成员变量?

How to initialize QXmlStreamWriter with QString as member variable?

我已经实现了我自己的 xml 编写器来生成 xml 作为 QString。

我已经创建了一个 class "MyXmlWriter" 私有成员变量作为 QXmlStreamWriter 并尝试在 public 方法 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(&result) 的调用不匹配; *

如果 QXmlStreamWriter write 在本地方法 writeToString() 中声明,那么我无法在私有方法中访问此编写器 writePart() 我想在其他方法中使用成员变量 "writer",这就是为什么局部声明不适合我的原因。

您必须为变量 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;
}