Qt предоставляет QDirIterator , который с флагами QDir::Files | QDir::NoSymLinks
и QDirIterator::Subdirectories
можно использовать для перебора каждого элемента, при необходимости получая .fileInfo().completeSuffix()
или .fileInfo().suffix()
(по желанию) для проверки тип расширения ("cpp" - без точки) и делайте с файлом все, что вам нужно.