c++ - 创建和访问指向 QObject 的指针的 QVector 的元素

标签 c++ qt qvector

我尝试将指向对象的指针添加到 QVector,但是当我稍后访问 QVector 时它似乎是空的。

这是代码的精简版本,问题是 Villain 类的 QVector 为 Minion*。

void Widget::mainFunction()
{
    int totalMinions = 5;
    for(int i = 0; i < totalMinions; i++)
    {
        evilOrganisation.getVillain().addMinion();
    }

    for(int i = 0; i < totalMinions; i++)
    {
        qDebug() << "Minion " << i << " Has " << evilOrganisation.getVillain().getMinion(i)->getNumItems()<< " items";
    }
}

最终目标是获取每个minion的元素数量

#include <QObject>
#include "villain.h"

class EvilOrganisation : public QObject
{
    Q_OBJECT
public:
    explicit EvilOrganisation(QObject *parent = 0);

    Villain getVillain(){return villain;}

private:
    Villain villain;

}; 

__

#include <QVector>
#include "minion.h"

class Villain
{
public:
    Villain();

    void addMinion(){minions.append(new Minion());} 

    Minion* getMinion(int i){return minions.at(i);} 

private:
    QVector<Minion*> minions;
};

addMinion() 成功附加了 1 个 Minion* 但下次调用该函数时 minions 为空。

getMinion(int i) 使程序崩溃,因为 minions.at(i) 不存在。 错误消息在哪里 - QVector::at: "index out of range"中的 ASSERT 失败

#include <QObject>

class Minion : public QObject
{
    Q_OBJECT
public:
    explicit Minion(QObject *parent = 0);

    int getNumItems(){return items;}

private:
    int items = 1;
};

那么,为什么 minions.append(new Minion()) 似乎可以工作,但每次我尝试访问它时 minions QVector 都显示为空?

最佳答案

您必须实现 Villain 复制构造函数。每次 EvilOrganisation::getVillain() 被调用时,您将获得您的类成员的拷贝 - Villain 对象,其中包含一个空的QVector ` 默认情况下。

另一个想法是只返回对你的Villain的引用

Villain& getVillain() {
    return villain;
}

关于c++ - 创建和访问指向 QObject 的指针的 QVector 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46762786/

相关文章:

c++ - undefined reference ,但链接并包含

c++ - CURL 和 ZLIB 编译

c++ - 返回 QVector 的最佳方式

qt - 获取 QMap 的一部分作为 QVector

c++ - 如何用 new 初始化 QVector<QVector<QString>> *matrix(作为类成员)?

c++ - boost C++ 单元测试代码覆盖率 TeamCity

c++ - Linux。不打印到文件

c++ - 将对象从 C++ 发送到 qml。空闲内存呢?

python - 如何阻止qt应用程序卡住主程序?

c++ - 访问 Cocoa 和/或 Carbon 以在 OS X 上启动时自动启动(在 C++ 上也使用 QT)