Есть функция которая реализует алгоритм "волновой алгоритм", у меня в программе используется для выхода из лабиринта, но это не столь важно.
runAlgorithm(unsigned int x, unsigned int y, double val)
{
// vecMap - QVector< QVector<double> > - сама карта;
// x,y - координаты начала волны.
// val - значение инициализации волны(по умолчанию 0 );
qApp->processEvents();
vecMap[x][y] = val;
if(vecMap[x-1][y] == Enums::EXIT || vecMap[x+1][y] == Enums::EXIT || vecMap[x][y-1] == Enums::EXIT || vecMap[x][y+1] == Enums::EXIT )
{
pathFinded = val;
return;
}
if(vecMap[x-1][y] == Enums::EMPTY || vecMap[x-1][y] > val+1)
runAlgorithm(x-1,y,val+1);
if(vecMap[x][y-1] == Enums::EMPTY || vecMap[x][y-1] > val+1)
runAlgorithm(x,y-1,val+1);
if(vecMap[x+1][y] == Enums::EMPTY || vecMap[x+1][y] > val+1)
runAlgorithm(x+1,y,val+1);
if(vecMap[x][y+1] == Enums::EMPTY || vecMap[x][y+1] > val+1)
runAlgorithm(x,y+1,val+1);
}
Каким образом возможно отобразить с помощью QProgressDialog пока обрабатывается сама функция, поле может быть достаточно большое на которое требуется время(примерно 100х100 обрабатывает 40 сек). Сама проблема заключается в определении точки конца(100%) и как его вообще с рекурсией связать.
upd 1: Модно конечно сделать чтоб просто надпись была "подождите..." , но я думаю пользователю намного познавательней будет когда будет видно сколько осталось %. Или каким может быть другим способом можно сделать, приму любую идею.