2012年1月14日土曜日

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


はいそれではQListを使用していきます。

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

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

というメリットがあるからです。(C++ GUI Programming with Qt4 251ページより)

それで今日使うQListですが、ざっくりいうと "QVectorとQLinkedListのいいとこどり"です。ランダムアクセスができ、リスト途中への要素追加も1000個以下なら高速という特徴を持っています。使い勝手がいいのでよく使うこととなるかと思います。(リファレンス

サンプルは独自のものを使います。
そして、いつものように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部品初期化

    QList<QString> list;//空のリスト宣言
    list << "One!";//要素"One!"を追加。位置は[0]
    list << "Two!";//要素"Two!"を追加。位置は[1]
    list.append("T");//要素"T"を追加。位置は[2]

    list[2] = "Three!";//listの[2]の位置の要素を"Three!"に変更

    //リスト内の文字列をQLabelに全て表示
    ui->label->setText(list.at(0) + list[1] + list[2]);
}
はい、簡単ですね。ui部についてはQListの理解には関係ないので無視して構いません。流れは空のリストを宣言し、そこに要素を追加し、最後にリスト内の文字をQLabelに表示しているだけです。

リスト末尾への要素の追加は<<でも.appendでもどちらでも構いません。追加したあとは[]でランダムアクセスが可能です。
要素の取り出しはat(int num)、[]どちらでも可能です。
その他にも様々な便利な関数が用意されていますので、他のものについてはリファレンスを確認してください。

※なお、QListのサブクラスは様々なものが用意されています。例えばQStringListはQListのサブクラスにあたります。 QListのサブクラスはQListの関数をもちろん使えますし、またクラスの目的に合った関数が追加されていますので大変便利です。この辺りもリファレンスで確認してみてください。(Inherited byの辺りに書いてあるかと思います。)

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



以上です。
次回は「コンテナ用イテレータの種類」について書きます。