文字列リテラルを QString へ変換する
Qt5では文字列リテラルを QString へ変換するには主に以下のメソッドを使用可能。
QString::fromLatin1()
- Latin1(ISO-8859-1) として QString を作成
QString::fromLocal8Bit()
- 現在のロケールに合わせたコーデックを使用して QString を生成します
QString::fromUtf8()
- 文字列が UTF-8 として QString を作ります
以下にマクロを使用しないパターンと使用するパターンを記載します。
[マクロ未使用パターン]
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QString> #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { QStringList qStrList; // QString::fromLocal8Bit() ⇒ 現在のロケールに合わせたコーデックを使用して QString を生成します QString temp = QString::fromLocal8Bit("日本語"); for (int i = 0; i < 100; i++) { QString qStrTest = temp; qStrList.append(qStrTest); } foreach (QString item, qStrList) { qDebug() << item; } }
[マクロ使用パターン]
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QString> #include <QDebug> #define Jstr(str) QString::fromLocal8Bit(str) MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { QStringList qStrList; QString temp = Jstr("日本語"); for (int i = 0; i < 100; i++) { QString qStrTest = temp; qStrList.append(qStrTest); } foreach (QString item, qStrList) { qDebug() << item; } }
実行結果
実行結果は、以下のとおりです。日本語文字列を使用しても、文字化けが発生しません。
以下の記事のサイトを参考にさせていただきました。ありがとうございます。
- Qt とソースファイルの文字コード ⇒ 文字列リテラルをQStringに変換する方法
- Qtのマクロについて