Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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++ 如何实时暂停操作(Qt5)?_C++_Qt5 - Fatal编程技术网

C++ 如何实时暂停操作(Qt5)?

C++ 如何实时暂停操作(Qt5)?,c++,qt5,C++,Qt5,我有一个函数,可以读取一些命令并执行与这些命令相关的操作。问题是我想在每个命令后暂停程序。这是我的代码: void MainWindow::moveDown(){ QPoint l = ui->label->pos(); int x = l.rx(); int y = l.ry(); if(y+50 <= 630){ QPixmap pix(":/resources/img/Penguin.png"); int

我有一个函数,可以读取一些命令并执行与这些命令相关的操作。问题是我想在每个命令后暂停程序。这是我的代码:

void MainWindow::moveDown(){

    QPoint l = ui->label->pos();
    int x = l.rx();
    int y = l.ry();
    if(y+50 <= 630){
        QPixmap pix(":/resources/img/Penguin.png");
        int w = ui->label->width();
        int h = ui->label->height();
        ui->label->setPixmap(pix.scaled(w,h,Qt::KeepAspectRatio));
        y = y+50;
        ui->label->setGeometry(x, y, 50, 50);
        //sleep(1);
    }
}
void主窗口::moveDown(){
QPoint l=ui->label->pos();
int x=l.rx();
int y=l.ry();
如果(y+50标签->宽度();
int h=ui->label->height();
ui->label->setPixmap(pix.scaled(w,h,Qt::keepasspectratio));
y=y+50;
ui->label->setGeometry(x,y,50,50);
//睡眠(1);
}
}

如您所见,我尝试了
sleep()
函数,但它会在标签开始移动之前暂停程序。我还应该尝试什么?

我多年前就实现了这个函数,从那时起我就一直在使用它。它让事件循环保持运行,以便UI在睡眠期间不会冻结。它通过对请求的毫秒数执行本地事件循环来实现这一点。它还如果应用程序要退出,则中止循环:

/*
 * Sleep for 'ms' milliseconds without freezing the UI.
 */
void sleepLoop(const long ms)
{
    QEventLoop idle_loop;
    QTimer timer;
    timer.setSingleShot(true);
    QObject::connect(&timer, &QTimer::timeout, &idle_loop, &QEventLoop::quit);
    QObject::connect(qApp, &QCoreApplication::aboutToQuit, &idle_loop, &QEventLoop::quit);
    timer.start(ms);
    idle_loop.exec();
}

谢谢您的帮助,但是我得到了对
main window::sleepLoop(long)\**的*未定义引用错误,并且也在moc文件中。我已经声明了该函数。我如何解决这个问题?
case 11:_t->sleepLoop(*重新解释\u cast(\u a[1]))“break;”-moc行@ȘtefanAndontjh为什么要把它变成一个成员函数?就像我写的那样,把它变成一个自由函数。