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

时间:2019-05-23 17:28:04

标签: c++ qt constructor streamwriter qtxml

我已经实现了自己的xml编写器,以将xml生成为QString。

我创建了一个类“ MyXmlWriter”,其私有成员变量为QXmlStreamWriter,并尝试在公共方法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)的调用不匹配; *

如果在本地方法 writeToString()中声明了 QXmlStreamWriter写入,那么我将无法通过私有方法 writePart()访问此写入器。 我想在其他方法中使用成员变量“ writer”,这就是为什么我不能选择使用本地声明的原因。

1 个答案:

答案 0 :(得分:0)

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

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

此代码很危险。 resultwriteToString()的末尾被破坏,因此writer包含无效数据,您将无法再使用它。 / p>

此外,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;
}