📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

415行目: 415行目:
<br>
<br>
また、<code>qPrintable(const QString &str)</code>マクロも存在しており、これは、<code><QString型のオブジェクト>.toLocal8Bit().constData()</code>に展開される。<br>
また、<code>qPrintable(const QString &str)</code>マクロも存在しており、これは、<code><QString型のオブジェクト>.toLocal8Bit().constData()</code>に展開される。<br>
<br><br>
== char*型からQString型へ変換 ==
char*型からQString型への変換は、簡単に行うことができる。<br>
<u>ただし、変換方法は、元のchar*型がどのエンコーディングで保存されているかにより異なることに注意する。</u><br>
<br>
* UTF-8エンコーディングの場合
<syntaxhighlight lang="c++">
char *pstr  = "Hello, World!";
QString qstr = QString::fromUtf8(pstr);
</syntaxhighlight>
<br>
* システムのローカルエンコーディングの場合
<syntaxhighlight lang="c++">
char *pstr  = "Hello, World!";
QString qstr = QString::fromLocal8Bit(pstr);
</syntaxhighlight>
<br>
* Latin-1 (ISO 8859-1) エンコーディングの場合
<syntaxhighlight lang="c++">
char *pstr  = "Hello, World!";
QString qstr = QString::fromLatin1(pstr);
</syntaxhighlight>
<br>
* エンコーディングが不明な場合や単純なASCIIの場合
<syntaxhighlight lang="c++">
char *pstr  = "Hello, World!";
QString qstr = QString(pstr);
</syntaxhighlight>
<br>
また、char*型の長さが既知の場合は、以下に示すようにオーバーロードされたバージョンを使用することができる。<br>
<syntaxhighlight lang="c++">
char *pstr  = "Hello, World!";
int length  = 13;  // "Hello, World!"の長さ
QString qstr = QString::fromUtf8(pstr, length);
</syntaxhighlight>
<br>
<u>※注意</u><br>
* <u>可能な限り、<code>QString::fromUtf8()</code>や<code>QString::fromLocal8Bit()</code>を使用することを推奨する。</u><br>これらのメソッドは、文字エンコーディングを正しく扱うことができる。
* <code>QString(char*)</code>コンストラクタを使用する場合、QtはデフォルトでLatin-1エンコーディングを仮定する。<br>これは、非ASCII文字を含む文字列で問題を引き起こす可能性がある。
* char*型がnull終端されていることを確認する必要がある。<br>そうでない場合、長さを明示的に指定する必要がある。
* メモリ管理に注意すること。<br><u>動的にchar*型が割り当てられている場合、QString型に変換した後、元のchar*型が不要になった場合は適切に解放する必要がある。</u>
<br><br>
<br><br>