正确传递一个简单列表

时间:2015-04-16 12:16:04

标签: c++ list qt parameter-passing

我是Qt和c ++的新手。我很难将点列表传递给方法。当我在全局声明列表并使用它时它工作正常,但是当我在本地声明它并将其传递给方法时它根本不起作用。(根本不工作我的意思是车辆没有一个点列表可以跟随它什么都不做,而不是它在全球宣布它工作得很好)

Simulation::Simulation()
{
    QList<QPointF> pointsToFollow3;
    pointsToFollow3  <<QPointF(0,25)<<QPointF(300,25)<<QPointF(1000,25)<<QPointF(1700,25);
    createVehicles(5, pointsToFollow3);
}
void Simulation::createVehicles(int numberOfVehicles, QList<QPointF> pointsToFollow)
{
    spawnVehicle(pointsToFollow);       
}

void Simulation::spawnVehicle(QList<QPointF> pointsToFollow)
{
    //spawn my vehicle
    Vehicle * vehicle = new Vehicle(pointsToFollow);
    vehicle->setPos(pointsToFollow[0]);
    scene->addItem(vehicle);
}

当在头文件中将点作为公共全局变量声明时,这是有效的,我认为我传递点列表的方式不正确,非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

它真的很难理解你的意思,而且你附加了工作代码,cource不理想,但工作。

在阅读了你的评论后,我试着意识到你想要做的事情。

您的标题类Simulation

#include <QObject>

class QGraphicsScene;
class QTimer;
class QPointF;

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

private:
    QGraphicsScene *scene;
    QList<QPointF*> *list;
    QTimer *timer;

private slots:
    void spawnVehicle();
};

它的实现:

Simulation::Simulation(QObject *parent) : QObject(parent)
{
    list = new QList<QPointF*>;
    for (int i = 0; i < 10; ++i)
        list->append(new QPointF(i*100, 25));

    timer = new QTimer;
    connect(timer, SIGNAL(timeout()), this, SLOT(spawnVehicle()));
    timer->start(1000);
}

在这种方法下,只需写入控制台列表的元素:

void Simulation::spawnVehicle()
{
    static int currentNumber = 0;

    qDebug() << (*list->at(currentNumber++));

    if (currentNumber >= list->size()) {
        timer->stop();
        deleteLater();
    }
}

在析构函数中,您必须释放资源:

Simulation::~Simulation()
{
    delete timer;
    qDeleteAll(list->begin(), list->end());
    list->clear();
    delete list;
    delete scene;    
}

至少我想说,在你的构造函数中创建QList<QPointF>并不是一个好主意;这没错,但我认为不是OO。

最好的方法是这样做:

使用Simulation(QList<QPointF> *lst, QObject *parent = 0)参数定义QList<QPointF> *构造函数,该参数已经创建并填充,并使用此实体进行处理。

我希望这个例子对你有用。