在长时间运行的点击按钮功能(插槽)中更新QLabel(多次)



我正在创建一个控制台程序的图形界面。

该程序执行命令并定期更新CCD_ 1。问题是我无法让它动态更新,函数执行正确,但QLabel直到执行结束才更新。

void MainWindow::on_pushButton_10_clicked()
{
estado_busqueda(2); // call function to change label, GUI should be updated immidiately
system("sleep 2"); // some long running system call
estado_busqueda(1); // call function to change label again 
}
void *MainWindow::estado_busqueda(int salida){
if(salida==1){
ui->face->setStyleSheet("image: url(:/media/sad.png);");
ui->song_info->setText("no puede encontrar datos de tu enlace");
ui->estado->setStyleSheet("image: url(:/media/search.png);");
}
else if (salida==2){
ui->informacion->setText("Obteniendo data del enlace");
ui->estado->setStyleSheet("image: url(:/media/esperando.png);");
}
else{
}
}

问题是我无法让它动态更新,函数执行正确,但QLabel直到执行结束才更新

小部件在同一个线程中执行,Qt称之为主线程。这意味着当你称之为睡眠时,你会冻结图形线程。这就解释了为什么什么都没发生。

正如评论中所说,estado_busqueda需要是一个插槽,并且您应该启动一个计时器,该计时器将在按下按钮时执行下一次更新。基本上@eyllanesc的建议应该适用于

QTimer::singleShot(2000, this, [this](){estado_busqueda(1); };

最新更新