В этой главе мы постараемся показать, как сделать так, чтобы символы кириллицы корректно отображались на экране, это не так сложно, да и родные буковки на экране видеть приятнее.
Для решения этой задачи мы будем использовать кодеки (специальные объекты для перекодировки строк). Соответствующий класс QTextCodec определён в заголовочном файле с тем же именем (заметьте без расширения: заголовочные файлы с расширением .h используются только в старых проектах Qt3). Для указания кодировки, используемой функцией перевода, надо создать соответствующий кодек, указав название используемой кодовой таблицы:
и передать его в качестве аргумента методу setCodecForTr:
QTextCodec::setCodecForTr(codec);
Поскольку при создании кодека указана конкретная кодовая таблица, то исход компиляции исходных текстов не зависит от системной кодировки той платформы, на которой производится сборка программы: результат будет везде одним и тем же. Но файлы с исходными текстами программ в этом случае нельзя подвергать перекодировке (или после перекодировки требуется изменить название кодовой таблицы, заданной при создании кодека).
Наиболее предпочтительный метод работы с символами национальных алфавитов связан с использованием специальной функции перевода tr, с помощью которой осуществляется интернационализация приложений. Подробнее этот вопрос мы обсудим позже, а пока договоримся все строковые константы, указанные в тексте программы, передавать в качестве параметра функции tr.
Пара слов о tr. Эта статическая функция является членом всех классов Qt, порождённых от базового класса QObject, но если мы собираемся вызвать её в главной программе, а не в каком-либо методе класса, то приходится указывать какой-нибудь подходящий объект, например, QObject::tr.
Это интересно.Для того чтобы осуществить проверку символа на цифру или прописную букву:
if (ch.isDigit() || ch.isUpper())
Этот фрагмент кода правильно работает для любых алфавитов, в которых различаются символы верхнего и нижнего регистра, в том числе для латинского, греческого и кириллицы.