int forIterator = 0;
Scenes::Scenes(QWidget * parent): QObject ()
{
setScene(scene);
for(int i = 0; i < Dot::number_of_dotz; i++)
{
QTimer *timer_move = new QTimer();
QObject::connect(timer_move,SIGNAL(timeout()),dotz[i],SLOT(move_slot()));
timer_move->start(10);
}
由于创建了一个新的点,因此在move_slot()中更新了Dot :: number_of_dots(+1),但是从未调用过该新点的move_slot。 为什么会这样(不发生)?
答案 0 :(得分:0)
似乎您应该在Dot
中创建一个新的move_slot()
。当Dot :: number_of_dotz静态成员的值大于0并且可能已经在其中创建了一些点实例时,将调用Scenes::Scenes(QWidget * parent)
构造函数。因此,Scene
构造函数被调用一次,并且不会被再次调用。
很明显,您正在执行此操作,因为您想在创建Scenes
类之后开始扩展dotz。
我的解决方案是检查sender()
中的move_slot()
类型,如果它是QTimer,则可以在QTimer
本身中创建新的move_slot()
。
我建议您为QTimer
设置一个父级,以防止内存泄漏。
void Dot::move_slots(){
// your code
QTimer *caller_object = qobject_cast<QTimer*>(sender());
// caller_object will be nullptr if this slot is not being called
// by an object other than a QTimer
if(caller_object){
QTimer *timer_move = new QTimer(this);
QObject::connect(timer_move,SIGNAL(timeout()),this,SLOT(move_slot()));
timer_move->start(10);
}
}
我希望我对您想要实现的目标的假设是正确的。如果不是这种情况,请发表评论。