2011年12月20日火曜日

( Qt C++ )QListViewにセットされたModelからデータを取り出す


人生設計を立てるということはどういうことなのだろうか?
これから先どうすんだ?子供は?家は?親の介護は?収入は?どのくらいの時期に何をやってるんだ?...とまぁそんな説教が好きな奴がたまにいる。 この手の人は別にこちらのことを思っていっているわけではない。先を考えている自分に酔っているだけである。というより先を考えているようで、私から言わせれば考えていないのである。
大きな病気をしたことのある方や手術を経験されたかたならわかるだろう。自分の命がいとも簡単に失われる可能性があるということに。彼らの言う人生設計はいつも甘い。事件、事故、病気それらのことは何にも考えていない。自分たちが当たり前のように80歳まで生きられると思って人生の計画を立てているのだ。不確実な計画立てて、「ねっ?私堅実でまじめでしょ?」と言ってるようにしか私には聞こえないのだ。

だから私はいつも ”人生 = 不明” を忘れずに生きようと思っている。
不確実な尺度で設計して、そんなものに振り回されるくらいなら何も考えないほうが精神衛生上マシですからね。

とはいえ、説教くさいしつこい奴には、黙らせるためにそれらしい人生設計を広げて差し上げますがね...。


はい、それではQListViewにセットされたModelから値の取り出しをやっていきます。
サンプルは独自のものを使います。また、いつものようにQtCreaterなどでuiでGUI部品の宣言を済ませているものとします。(QtCreaterの使い方はQtをはじめようを見てください。)
では、コードを

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)//uiにはGUI部品が記述。(QListView & QLabel)
{
    ui->setupUi(this);//uiのGUI部品の初期化

    QStringListModel *model = new QStringListModel();//Qlistviewに使用する
    QStringList qlist;//上のmodelにセットする文字リスト
    qlist << "one";
    qlist << "two";
    qlist << "three";
    model->setStringList(qlist);//modelにqlistをセット

    ui->listView->setModel(model);//QListViewにmodelをセット

    QModelIndex index = ui->listView->model()->index(2,0);

    ui->label->setText(tr("value: %1").arg(ui->listView->model()->data(index, Qt::DisplayRole).toString()));/*QLabelのテキストにモデルから取り出したものをセット*/
}

※uiはGUI部の記述がされているだけです。

簡単ですね。まずセットするためのモデルを作成します。その後そのモデルをセットします。重要なのは次の

QModelIndex index = ui->listView->model()->index(2,0);

です。QtではいちいちQModelIndexを取り出さないとモデルのデータ処理はできないようです。めんどくさいですが仕方ありません。listViewのモデルを呼び出し、index関数で2行目の0列目のQModelIndexを取り出しています。それを 次の

...ui->listView->model()->data(index, Qt::DisplayRole).toString()

で使用し、モデルにセットされたデータをQStringで取り出して。QLabelに表示しています。

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