📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== 概要 == <br><br> == 数値を文字列に変換する == <code>QString::number()</code>を使用して、数値を文字列に変換する。<br> <br> 少数を変…」 |
|||
| 29行目: | 29行目: | ||
qDebug() << QString::number(0.0000001, 'g', 7); // 浮動小数0.0000001を有効桁数7桁で簡潔表記 | qDebug() << QString::number(0.0000001, 'g', 7); // 浮動小数0.0000001を有効桁数7桁で簡潔表記 | ||
qDebug() << QString::number(1.2345678, 'g', 7); // 浮動小数1.2345678を有効桁数7桁で簡潔表記 | qDebug() << QString::number(1.2345678, 'g', 7); // 浮動小数1.2345678を有効桁数7桁で簡潔表記 | ||
</syntaxhighlight> | |||
<br><br> | |||
== 文字列を数値に変換する == | |||
<syntaxhighlight lang="c++"> | |||
QString numStr = "1234"; | |||
int i = numStr.toInt(); // i=1234 | |||
long l = numStr.toLong(); // l=1234 | |||
double d = numStr.toDouble(); // d=1234 | |||
</syntaxhighlight> | |||
<br><br> | |||
== 文字列の長さや数を取得する == | |||
<syntaxhighlight lang="c++"> | |||
QString txtStr = "ABC123:def12 6"; | |||
int sz = txtStr.length(); // 空白を含む文字数 sz=14 | |||
int ix = txtStr.indexOf("12"); // 指定文字列を最初に見つけた位置 ix=3 | |||
int cnt = txtStr.count("12"); // 指定文字列の個数 cnt=2 | |||
QString str = txtStr.at(1); // 指定位置の文字 str="B" | |||
</syntaxhighlight> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>lengthは0x00も1文字として数える。</u><br> | |||
<br><br> | |||
== 文字列の確認 == | |||
<syntaxhighlight lang="c++"> | |||
QString txtStr = "ABC123:def126 "; | |||
bool bl = txtStr.contains("F12"); // 指定文字を含むか bl=false | |||
bool bl = txtStr.contains("F12", Qt::CaseInsensitive); // 指定文字を含むか bl=true | |||
bool bl = txtStr.startsWith("A"); // 指定文字から始まるか bl=true | |||
bool bl = txtStr.endsWith("6"); // 指定文字で終わるか bl=false(最後は空白) | |||
// isNullメソッドとisEmptyメソッドは異なる | |||
QString txtStr2 = ""; | |||
bool bl = txtStr.isEmpty(); // 空か bl=true | |||
bool bl = txtStr.isNull(); // NULLか bl=false | |||
</syntaxhighlight> | |||
<br> | |||
<u>※注意</u><br> | |||
<u><code>CaseInsensitive</code>を指定する場合、大文字・小文字の区別を無視する。</u><br> | |||
<u><code>startsWith</code>メソッドと<code>endsWith</code>メソッドも、<code>CaseInsensitive</code>を指定することができる。</u><br> | |||
<br><br> | |||
== 基本的な文字列操作 == | |||
<syntaxhighlight lang="c++"> | |||
QString txtStr = "ABC123:def126 "; | |||
QString str = txtStr.mid(1, 3); // 指定位置から指定文字数を切り出す str="BC1" | |||
QString str = txtStr.left(1); // 先頭から指定文字数を切り出す str="A" | |||
QString str = txtStr.right(2); // 末尾から指定文字数を切り出す str="6 " | |||
QString str = txtStr.toLower(); // アルファベット小文字に変換する str="abc123:def126 " | |||
QString str = txtStr.toUpper(); // アルファベット大文字に変換する str="ABC123:DEF126 " | |||
QString str = txtStr.repeated(2); // 指定回数だけ繰り返す str="ABC123:def126 ABC123:def126 " | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、元の文字列を書き換えるため、使用する場合は注意が必要である。<br> | |||
<syntaxhighlight lang="c++"> | |||
QString txtStr = "ABC123:def126 "; | |||
txtStr.replace(3, 2, "xy"); // 指定位置から指定文字数の置き換える txtStr="ABCxy3:def126 " | |||
txtStr.chop(2); // 末尾の指定文字数を削除する txtStr="ABCxy3:def12" | |||
txtStr.insert(1, QString("and")); // 指定位置の前に挿入する txtStr="AandBCxy3:def12" | |||
txtStr.fill('X', 4); // 文字を指定数並べる txtStr="XXXX" | |||
txtStr.setNum(2.5); // 数値を文字列に変換する txtStr="2.5" | |||
</syntaxhighlight> | |||
<br><br> | |||
== 文字列の右詰め == | |||
<syntaxhighlight lang="c++"> | |||
QString txtStr = "12345"; | |||
QString str = txtStr.rightJustified(8, '0'); // str="00012345" | |||
QString str = txtStr.rightJustified(8, '.'); // str="...12345" | |||
QString str = txtStr.rightJustified(3, '.', true); // str="123" | |||
QString str = txtStr.rightJustified(3, '.', false); // str="12345" | |||
QString str = QString::number(98).rightJustified(4, '0'); // str="0098" | |||
</syntaxhighlight> | |||
<br> | |||
<u>※注意</u><br> | |||
<u><code>rightJustified</code>メソッドの第3引数の初期値は、<code>false</code>である。<code>true</code>を指定すると指定桁数に切り詰める。</u><br> | |||
<br><br> | |||
== 空白の切り詰め == | |||
<code>simplified</code>メソッドは、空白・タブ・改行をまとめて1つの空白に置き換える。この時、先頭と末尾は削られる。<br> | |||
<code>trimmed</code>メソッドは、先頭と末尾の空白・タブ・改行を取り除く。<br> | |||
<syntaxhighlight lang="c++"> | |||
QString txtStr = "\t AB CD\n EF GH\tIJ\n\nKL \n"; | |||
QString str = txtStr.simplified(); str="AB CD EF GH IJ KL" | |||
QString str = txtStr.trimmed(); str="AB CD\n EF GH\tIJ\n\nKL" | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
| 56行目: | 151行目: | ||
qDebug() << str.rightJustified(5, ' '); | qDebug() << str.rightJustified(5, ' '); | ||
} | } | ||
</syntaxhighlight> | |||
<br><br> | |||
== 文字列の分割 == | |||
以下の例では、文字列を区切り文字で分割して、文字列リスト(QStringList)に代入している。<br> | |||
<syntaxhighlight lang="c++"> | |||
QString txtStr = "ABC123:def12 "; | |||
QStringList list = txtStr.split(":"); // :(コロン)で分割する | |||
QString str = list[0]; // "ABC123" | |||
QString str = list[1]; // "def12 " | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、ループで文字列リストを処理している。上記と同様の結果になる。<br> | |||
<syntaxhighlight lang="c++"> | |||
QString txtStr = "ABC123:def12 "; | |||
QStringList list = txtStr.split(":"); // :(コロン)で分割する | |||
for(int i = 0; i < list.count(); i++) | |||
{ | |||
QString str = list.at(i); // list[i]でも同じ | |||
} | |||
foreach(QString word, list) | |||
{ | |||
QString str = word; | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
== 文字列の整形 == | |||
<code>arg</code>と<code>%</code>を使用して、文字列を整形できる。<br> | |||
<syntaxhighlight lang="c++"> | |||
QString str = QString("座標=(%1, %2) サイズ=%3x%4 テキスト=%5").arg(10).arg(20).arg(240).arg(120).arg("メッセージ"); | |||
// str="座標=(10, 20) サイズ=240x120 テキスト=メッセージ" | |||
</syntaxhighlight> | |||
<br> | |||
また、<code>printf</code>のように文字列を整形することもできる。<br> | |||
<syntaxhighlight lang="c++"> | |||
QString sDt="ABC"; | |||
QString str; | |||
str.sprintf("%02d:%02d, %cクラス, 0x%04x, (%4.2lf), (%-3d), (%5s), (%.2s)", 9, 2, 'S', 255, 3.1415, 7, qPrintable(sDt), qPrintable(sDt)); | |||
// str="09:02, Sクラス, 0x00ff, (3.14), (7 ), ( ABC), (AB)" | |||
</syntaxhighlight> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>半角英数の場合は<code>qPrintable</code>関数でも表示できるが、全角文字の場合は<code>QString</code>クラスの<code>toUtf8().constData()</code>を使用しないと文字化けする。</u><br> | |||
<u>また、Qt 5.7以降では、以下のように、<code>QString::asprintf</code>メソッドが使用できる。</u><br> | |||
<syntaxhighlight lang="c++"> | |||
QString str = QString::asprintf("フォーマット", データの並び); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||