2010-12-12 51 views

Répondre

2

Il y a QChar::Category howver il ne fournit pas tout ce que vous avez besoin, pour vérifier si le caractère est dans certaine gamme, vous pouvez écrire une fonction comme ceci:

bool inRange(QChar c, ushort b, ushort e) { 
    return (c.unicode() >= b) && (c.unicode() <= e); 
} 

Vous pouvez alors l'utiliser comme ceci:

inRange(c, 0x3040, 0x309F); // Hiragana? 

Bien sûr, vous pouvez aller plus loin et de le rendre plus abstrait et enemurate les gammes:

inRange(c, Range::Hiragana); 

et here est la liste des blocs Unicode

+1

pourquoi ne pas simplement "retourner c.unicode()> = b && c.unicode() <= e;"? Complexité constante vs linéaire ... –

+0

Oui, ce serait en effet mieux :) Edité. – Palmik

0

Je ne sais pas s'il existe une meilleure approche spécifique de Qt. Si ce n'est pas vous pourriez essayer d'utiliser ICU plutôt que de rouler votre propre solution. ICU possède à la fois une version "C/C++" et une version Java. La version Java d'ICU partage en fait un ancêtre commun avec certaines des bibliothèques standard Java pour i18n/l10n, donc la version C/C++ sera, espérons-le, facile à comprendre.

+0

J'ai des sentiments mitigés sur l'ajout d'une dépendance de bibliothèque supplémentaire à mon application pour quelque chose de si simple. Comme je le vois, il devrait être facile de récupérer une sorte de code de caractère de mon personnage et ensuite de le tester contre une gamme de codes tels que définis dans la norme Unicode - ai-je tort? – neuviemeporte