QProgressDialog *dialog=new QProgressDialog("","",0,1200,this,Qt::Dialog|Qt::CustomizeWindowHint|Qt::WindowTitleHint); spreadsheet->clear();//мой класс таблицы spreadsheet->setRowCount(1200); dialog->setCancelButton(0); for(int i=0;i<1200;i++) { qApp->processEvents(); spreadsheet->setItem(i,0,QString::number(i)); dialog->setValue(i); } dialog->setValue(1200);
#define UPDATE_STEP 100... QTime curTime; curTime.start(); QTime begTime = curTime; for(int i=0;i<1200;i++) { spreadsheet->setItem(i,0,QString::number(i)); if ((i + 1) % UPDATE_STEP) continue; // обновиться 1 раз на 100 setItem if (curTime.elapsed() < 500) continue; // не суетимся если прошло меньше пол-секунды // теперь обновляемся dialog->setValue(i); qApp->processEvents(); // это лучше после dialog->setValue(i); curTime.restart(); // прикидываем оставшееся время (в миллисекундах) int timeLeft = qint64(begTime.msecTo(curTime)) * (1200 - i) / i; } dialog->setValue(1200);