Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在程序继续运行的同时,如何在两部分代码之间产生时间间隔或延迟?C++;_C++_Qt_Qt5 - Fatal编程技术网

C++ 在程序继续运行的同时,如何在两部分代码之间产生时间间隔或延迟?C++;

C++ 在程序继续运行的同时,如何在两部分代码之间产生时间间隔或延迟?C++;,c++,qt,qt5,C++,Qt,Qt5,我有以下代码: if(collision == 1) { painter->setBrush(QColor(Qt::red)); painter->setPen(QColor(Qt::black)); painter->drawEllipse(QPoint(boundingRect().x() + (boundingRect().width() / 1.7), boundingRect().y()

我有以下代码:

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()
但这些命令会停止或暂停整个程序我只想延迟“碰撞=0”的执行 有什么想法吗?

sleep()
wait()
停止所有GUI线程,使其冻结。尝试使用
QTimer
中的
singleShot
。例如:

QTimer::singleShot(4000,this,SLOT(mySlot()));

mySlot
中,您可以完成所有需要的工作。在这种情况下,
singleShot
不会冻结GUI。例如,将碰撞设置为零并调用更新,它将调用
paintEvent
,在此
paintEvent
中,如果碰撞为零,则不会再次绘制椭圆。

查看是否只希望在经过一定时间后运行一段代码。有关更复杂的并发性,请参见(尽管注意,C++11现在已将线程作为标准的一部分,因此根据您的需要,最好开始学习这种方式而不是Qt方式)
QTimer::singleShot(4000,这个,SLOT(collisionSet());void-OtesanekItem::collisionSet(){collision=0;}
这段代码给了我一个错误:调用'QTimer::singleShot(int,OtesanekItem*const,const char*)没有匹配的函数@OndřejKrál请看这个答案:QGraphicsItem子类有解决方案,或者只包含QTimer
QTimer::singleShot(4000,this,SLOT(mySlot()));