QStringはUTF-16
Qtでは、文字コードをUTF-16で扱っています。
Visual StudioとQtを標準インストールすると、新規作成するソースファイルの文字コードはデフォルトでUTF-8となっているため、何らかの変換が必要となります。
(変換しないと化けます)
変換方法
QString::fromLocal8Bit()
個人的には、この関数を使うことが多いんじゃないかなと思います。
ソースファイルがUTF-8なら、QString::fromUtf8()で良いのでは?と思うかもしれませんが、Visual Studioを使用する場合、文字列リテラルは、ソースファイルの文字コードに関わらずロケールの文字コード(WindowsならShift-JIS)に変換されてコンパイルされるため、現在のロケールに合わせたコーデックで変換してくれるQString::fromLocal8Bit()を使用します。
QString str = QString::fromLocal8Bit("テスト"); ui->label->setText(str);
QString::fromUtf8()
Visual Studio 2015以降であれば、Unicode文字列リテラルに対応しているため、接頭辞u8を付けることでUTF-8のまま(ロケールの文字コードに変換されることなく)コンパイルさせることができます。
この場合には、本関数を使用すればOKです。
QString str = QString::fromUtf8(u8"テスト"); ui->label->setText(str);
Visual Studio 2015より以前のバージョンを使用している場合、以下のpragma指定をすることで、文字列リテラルをUTF-8にすることが出来ます。
#pragma execution_character_set("utf-8")