c++ - 追加和迭代 QList

标签 c++ qt

我的 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("佐伊");
  • 我的列表<< "佐伊";
  • myList += "佐伊";

fooClass.cpp

QString name = "";

QString fooClass::getName()
{
    return name;
}

fooClass::fooClass(QString newName)
{
    name = newName;
}

最佳答案

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

name = newName;

您更改该变量的值。

如果您希望每个 fooClass 都有自己的名称,您应该像这样使 fooClassname 变量成员:

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

关于c++ - 追加和迭代 QList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9334600/

相关文章:

c++ - Qt:使用信号和槽从另一个类调用 MainWindow::Ui

windows - 从 Qt 更改屏幕分辨率?

c++ - Ruby FFI 找不到某些功能?

c++ - 未设置 SDL_Texture

macos - LLDB 调试器永远不会在 QtCreator 中完成

c++ - qt gui使用Qfiledialogbox和qlabel显示视频。这是我的代码

qt - 有没有一种优雅的方式来公开子窗口小部件的插槽?

c++ - 模板函数 : default construction without copy-constructing in C++

c++ - 生成 OpenCV 64 位 DLL

c++ - 将 size_t 转换为 long,有什么缺点吗?