Избитая тема. Но стоит повториться.
QObject::tr() нужен для подставления локализованьІх строк по ключу. Етот механизм позволяет не использовать
НЕ-латинские символьІ в коде. Использование не-латинских символов само по себе является плохим стилем программирования. В Qt4 можно локализованьІе строки легко засунуть в исполняемьІй файл, чтобьІ не тягать отдельно вместе с программой файл локализации.
По хорошему правильно так:
1. Не юзать
QTextCodec::setCodecFor...
2. Юзать латинские символьІ в
tr():
QPushButton * button = new QPushButton( tr( "hello" ), this );
3. Юзать
QTranslator для перевода строк.
4. Добавить в проект переведённую строку "hello" на русский язьІк как ресурс.