我有以下代码:
if(collision == 1)
{
painter->setBrush(QColor(Qt::red));
painter->setPen(QColor(Qt::black));
painter->drawEllipse(QPoint(boundingRect().x() + (boundingRect().width() / 1.7),
boundingRect().y() + (boundingRect().width() / 2.1)),
boundingRect().width() / 5,
boundingRect().height() / 10);
/*THERE SHOUD BE THE TIME GAP AND THEN DO*/
collision = 0;
}
我想使用此代码绘制红色椭圆,但只有几秒钟(碰撞后)。 因此,我必须在此代码的两个部分之间留出时间间隔或延迟。 这里的问题是我不知道该怎么做。
我尝试了sleep()或wait()或:
QTime dieTime= QTime::currentTime().addSecs(1);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
但是这些STOP或PAUSE整个PROGRAM 我只想延迟执行“collision = 0” 有什么想法吗?
答案 0 :(得分:3)
sleep()
或wait()
停止所有GUI线程,因此它会冻结。尝试使用singleShot
中的QTimer
。例如:
QTimer::singleShot(4000,this,SLOT(mySlot()));
在mySlot
中你可以做所有需要的东西。在这种情况下,singleShot
不会冻结您的GUI。例如,将碰撞设置为零并调用更新,它将调用paintEvent
并在此paintEvent
中进行零碰撞,您的椭圆将不再被绘制。