2011年11月23日水曜日

( Qt C++ )リストビューに表示した項目の取得など


あぁ寒い。冬は虫がいなくていいけど寒いのがいやだね。燃料代も馬鹿みたいにかかるし。

今日はQtプログラミングについてのメモ。
Qtに関する日本語による情報は本当に少ない。(C#やJavaなどに比べるとかなり少ない)
リストビューに表示までは日本語による解説ページもチラホラあり、わりとすんなりいくのだけど、リストビューの項目を取り出そうとすると日本語による解説ページがないのでかなり
苦戦した。これがベストなやり方とは到底思えないが、解決の糸口になると思うので一応メモしておく。

void MainWindow::fileReName()
{
    if(ui->listView->model() != NULL && 
ui->listView->selectionModel()->isSelected(ui->listView->currentIndex()))
    {
        QItemSelectionModel *temp;
        temp = ui->listView->selectionModel();

        QModelIndexList qModelIndexList = temp->selectedIndexes();
        QModelIndex qMIndex = qModelIndexList[0];

        QFile::rename(dirName + "/" + qMIndex.data(0).toString(),
                      dirName + "/fuck.txt");
        //...以下は不必要なので省略
    }
}

上記では単項目リストビューから選択したモデルを取り出し、そのデータを利用しファイル名をリネームしている。
なお、QModelIndexListはtypedefで "Synonym for QList<QModelIndex>."ならしい。

今回はリファレンスだけを見ながら組んだのだが、リファレンスだけでは作業効率が悪すぎる。それらしい関数名を探すだけでかなりの時間を要する。素直にQt入門書を買って、ある程度広く浅い知識をつけてからリファレンス片手にプログラムを組んでいけば、こんなつまらないことでつまづくことはないんじゃないかと思う。
だけど書籍って場所とるし高いんだよなぁ...。

追記: このコードは無駄が多いです。 temp->selectedIndexes();でQModelIndexList保持するところが特にです。この後の記事でモデルからのデータ取り出しを扱っています。そちらを参考にしたほうがいいかもしれません。