2012年1月23日月曜日

( Qt C++ )QStringについて


はい今回はQStringについて書いていきます。

「コンテナクラスじゃないじゃん!」そう思った方、実は私もです。しかしC++ GUI Protramming with Qt4のcontainer classesの章によると「無関係じゃねぇし。QString,QByteArray,QVariantはここで説明すっから」と書かれています。ですので私もそれに従い書いていきます。

ということでQStringをやっていきますが、これは簡単に言うと「QCharのベクタみたいなもの」だそうです。QStringは16ビットのUnicode文字を使え、メモリ管理や終端文字の管理などの詳細について心配しなくてもいいというメリットがあるそうです。


以下に用途別にコードを書いていきます。
ではコードを
(C++ GUI Protramming with Qt4 265ページからを参考)


(+, += 演算子を使った文字列の連結、追加連結)
QString str = "A";
str += "B";//"AB"となる
str = str + "C";
//strは最終的に"ABC"となる


(QString::append() を使った文字列の追加連結)
QString str = "A";
str.append("B");//"AB"となる
str.append("C");
//strは最終的に"ABC"となる


(.arg を使った文字列の組み立て)
QString str = QString("%1%2%3%4")
              .arg("A").arg("B").arg("C").arg(2012);
//strは最終的に"ABC2012"となる。


(数値から文字列へ、文字列から数値へ)
QString str = "1";
int num = str.toInt();//strの文字列をintに変換
str.setNum(9 + num);//strに9 + numした数値を文字列に変換して格納
//最終的にstrには文字列"10"が格納


(文字列の一部を取り出す)
QString str = "ABC";

//第一引数は開始位置、第二引数は取り出す長さ
//第二引数を省略すると末尾まで取り出すこととなる
str = str.mid(0, 2);
//strには最終的に"AB"が入る


(文字列の最初または最後から文字列を取り出す)
QString str = "ABC";
str = str.right(1);//末尾から1文字取り出す(ここでは"C")
str = "ABC";
str = str.left(2);//最初から2文字取り出す(ここでは"AB")


(文字列を検索しそのインデックスを返す)
QString str = "ABC";
int i = str.indexOf("B");//"B"は1番目の要素なので1が入る
str.setNum(i);//文字列に変換


(文字列の最初と末尾の文字列を検索する)
QString str = "ABC";

//startsWithは最初の文字列を検索 
//endsWithは末尾の文字列を検索
if(str.startsWith("A") && str.endsWith("C"))
    str = "Ok";
//最終的にstrは"Ok"となる


(文字列を大文字または小文字にする)
QString str = "ABC";
str = str.toLower();//小文字にする(この場合"abc")
str = str.toUpper();//大文字にする(この場合"ABC")


(文字列の置換)
QString str = "ABCDiyu";

//第一引数は置換開始位置、第二引数は置換文字数
//第三引数は置換文字列
str.replace(4, 3, "EFG");
//strは最終的に"ABCDEFG"となる


(trimmed() 文字列の両端の空白、タブ、改行を消す。)
(simplified() 文字列の複数個の空白を一つの空白にする)
QString str = " ABCDiyu \t e\n";
str = str.trimmed();//これで"ABCDiyu \t e"となる
str = str.simplified();//これで"ABCDiyu e"となる


(文字列の分割)
QString str = "ABC DEF GHI";

//" "で分割する
QStringList list = str.split(" ");
//最終的にlistには[ "ABC", "DEF", "GHI" ]が入る


(文字列が空かどうか確認する)
QString str = "ABC";

//isEmptyは空ならFalse。それ以外はTrue
//lengthは文字数を返す。0なら空
if(!str.isEmpty() && str.length() > 0)
    str = "OK";

//なお、\0も文字に入れられ、length()では\0を含めた文字列の長さを返すそうです。

他にも様々な機能の関数が用意されています。
後はリファレンスを参照してください。

以上です。