Qt 使用迭代器重载了 qtextstream 输出运算符

qt overloaded qtextstream output operator with iterator

本文关键字:qtextstream 输出 运算符 重载 迭代器 Qt      更新时间:2023-10-16

我创建了一个两个类 - Platform和PlatformModel。 PlatformModel 包含一个 QVector。

我想输出有关向量中每个平台的信息,因此我重载了 Platform 类的输出运算符,如下所示:

QTextStream &operator <<(QTextStream &outStream, const Platform  &platform);

定义为:

QTextStream &operator <<(QTextStream &outStream, const Platform &platform)
{
   platform.print(outStream);
   return outStream;
}

从 PlatformModel 对象中,我像这样遍历向量:

QVector<Platform*>::const_iterator i;
for(i = mPlatforms.begin(); i != mPlatforms.end(); ++i)
{
    if ((*i)->mInclude)
    {
        outStream << (*i);
    }
}

QTextStream 最终被写出到一个文件中,但我得到的只是平台对象的地址 - 未调用被覆盖的运算符<<函数。 我做错了什么?

你需要再次尊重迭代器 - 因为向量包含指针,而迭代器是指向向量元素的指针,i 是双指针。

    outStream << *(*i);

应该可以工作,或者为了简单起见,您可以使用Q_FOREACH宏或索引遍历矢量。