0

这是我的代码:

void FileOperations::EncryptAndSave(Ui::MainWindow *NUI){
int Stime = clock();
int percent=0;
NUI->progressBar->setVisible(1);
while(percent<100)
{
    if(clock()-Stime>250)
    {
        percent++;
        NUI->progressBar->setValue(percent);
        Stime=clock();
    }
    Sleep(1);
}
CFuncion=0;
NUI->progressBar->setVisible(0);
}

我不希望这个循环在几秒钟后不冻结整个程序,这可能吗,还是我需要多线程?

如果多线程是唯一的选择,有人可以给我一些示例代码(将变量发送到第二个线程)

我打算把代码放在 main.cpp 中,让它在每次检查代码时运行,但在 QT 中,main.cpp 只执行一次。

顺便说一句,这是一个示例代码,显然它什么也没做,我要把一些文件操作放在循环中。

4

1 回答 1

3

QCoreApplication::processEvents()应在您的循环中调用以避免 UI 冻结。

while(percent<100)
{
    if(clock()-Stime>250)
    {
        percent++;
        NUI->progressBar->setValue(percent);
        Stime=clock();
    }
    QCoreApplication::processEvents();
    Sleep(1);
}
于 2013-01-25T05:41:11.283 回答