📢 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> | ||