2012年1月12日木曜日

( Qt C++ )QVectorを使用する


私は乱視が少しあるので長時間モニタを見ていると次の日、目が疲労でエライことになる。貴様ウサギかっ!みたいになる。でなんとかならないか試行錯誤していたのだがついに目の疲労を抑える方法を見つけることができた。簡単なことである。それは...なんと...「フォントを大きくする」です。ええマジです。ふざけてなんていません。win7でテキストサイズ(中)125%以上にすると全然目が疲れないようになりました。
これは私の推測ですが、通常のフォントサイズだと熱中し始めると速く情報を処理しようとついつい顔をモニタに近づけてしまいます。しかし、フォントが大きくなると顔を近づけると逆に見通せる情報量が減ってしまうので自然にモニタから顔を離すようになるので目の負担が減るのだと思います。目の疲れに悩んでる方是非試してみてください。


はいそれでは今日からC++ GUI Programming with Qt4の11章Container Classをやっていきます。今回はQVectorをやります。

C++にもコンテナクラスは用意されていますがQtを使うならQtのコンテナクラスを使用したほうがよさそうです。なぜなら

①各プラットフォームで同じ動作を保証できる
②コピーオンライトであること

というメリットがあるからです。(C++ GUI Programming with Qt4 251ページより)
それで今日使うQVectorですが、一言で表すと "動的にサイズ変更可能な配列" のようなものです。末尾追加は高速だが、先頭、途中追加は低速という特徴をもっています。使い勝手がいいのでプログラミングでよく使うことになるかと思います。(リファレンス)

サンプルは独自のものを使います。
そして、いつものようにQtCreaterの使用を前提とします。(QtCreaterなどの使い方は ”Qtをはじめよう" を見てください。)
ではさっそくコードを


(mainwindow.cpp)
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)//ui部にはGUI部品について書かれています。
{
    ui->setupUi(this);//uiのGUI部品初期化
    
    QVector<int> vect(3);//通常の配列のように使用
    QVector<int> vect2;//空のベクタ宣言

    vect[0] = 1;//0番地に1を代入
    vect[1] = 2;//1番地に2を代入
    vect[2] = 3;//...

    vect2.append(4);//末尾に4を追加
    vect2 << 5 << 6;//それぞれ末尾に5、6の順に追加

    QString str;
    for(int i = 0; i < vect.count(); i++)//vectの要素の取り出し
    {
        str += tr("%1").arg(vect[i]);
    }

    str += " : ";

    for(int i = 0; i < vect2.count(); i++)//vect2の要素の取り出し
    {
        str += tr("%1").arg(vect2[i]);
    }
    
    ui->label->setText(str);//QLabelに表示
}

はい簡単ですね。ui部についてはQVectorの理解には関係ないので無視して構いません。vect2だけ変わった代入方法を使っています。それぞれ代入後、QStringに要素を取り出し最後にQLabelに表示しています。

実行すると以下のようになります。


以上です。