Eliminando acentos de una QString [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo eliminar los acentos / marcas diacríticas de una cadena en Qt? 4 respuestas

Quiero eliminar los acentos y, en general, las marcas diacríticas de una cadena para iniciar una búsqueda insensible al acento. Basándome en algunas lecturas sobre las clases de personajes de Unicode, he encontrado esto:

 QString unaccent(const QString s)
 {
   QString s2 = s.normalized(QString::NormalizationForm_D);
   QString out;
   for (int i=0,j=s2.length(); i<j; i++)
   {
     // strip diacritic marks
     if (s2.at(i).category()!=QChar::Mark_NonSpacing &&
         s2.at(i).category()!=QChar::Mark_SpacingCombining)
     {
          out.append(s2.at(i));
     }
   }
   return out;
 }

Parece funcionar razonablemente bien para los idiomas latinos, pero me pregunto si es adecuado en otros alfabetos: árabe, cirílico, CJK ... que no puedo probar debido a la falta de comprensión cultural de estos.

Específicamente me gustaría saberlo:

La forma de normalización de Unicode es más adecuada para este problema:NormalizationForm_KD oNormalizationForm_D?¿Es suficiente eliminar los personajes que pertenecen aMark_NonSpacing yMark_SpacingCombining ¿Categorías o debería incluir más categorías?¿Existen otras mejoras al código anterior que lo harían funcionar lo mejor posible en todos los idiomas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta