Есть функция которая реализует алгоритм "волновой алгоритм", у меня в программе используется для выхода из лабиринта, но это не столь важно. 
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: Модно конечно сделать чтоб просто надпись была "подождите..." , но я думаю пользователю намного познавательней будет когда будет видно сколько осталось %. Или каким может быть другим способом можно сделать, приму любую идею.