我是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);
}
当在头文件中将点作为公共全局变量声明时,这是有效的,我认为我传递点列表的方式不正确,非常感谢帮助。
答案 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> *
构造函数,该参数已经创建并填充,并使用此实体进行处理。
我希望这个例子对你有用。