通过QList进行追加和迭代

Appending and Iterating Through QList

本文关键字:迭代 追加 QList 通过      更新时间:2023-10-16

My QList保存指向类的指针。我试图遍历QList,但它的所有元素似乎只包含我分配给QList的最后一个指针。

代码:

QList<fooClass*> myList;
fooClass *pNewFooA = new fooClass("Bob");
myList.append(pNewFooA);
fooClass *pNewFooB = new fooClass("Jen");
myList.append(pNewFooB);
fooClass *pNewFooC = new fooClass("Mel");
myList.append(pNewFooC);
QList<fooClass*>::iterator i;
for (i = myList.begin(); i != myList.end(); i++) {
    cout << (*i)->getName() << "n";
}

输出:

Mel
Mel
Mel

我没有使用.append(),而是尝试了以下操作,但没有成功:

  • myList.push_back("zoe")
  • myList<lt;"zoe"
  • myList+="zoe"

fooClass.cpp

QString name = "";
QString fooClass::getName()
{
    return name;
}
fooClass::fooClass(QString newName)
{
    name = newName;
}

根据您显示的代码,您的name全局变量。这意味着,对于fooClass所有实例,程序中只有一个name变量。每次你执行

name = newName;

您可以更改该变量的值。

如果你想让每个fooClass都有自己的名字,你应该让fooClassname变量成员像这样:

class fooClass
{
public:
    //some stuff here
private:
    QString name;
};

问题不在您的列表中,请在头中使名称成为fooClass的私有成员。应该像一样

class fooClass{
public:
  fooClass(QString newName);
  QString getName();
private:
  QString name;
};

并从cpp中删除全局变量名。无论如何,您不需要使用"初始化QString。