Runner in the High

技術のことをかくこころみ

QTreeViewについてのメモ

QTreeViewを使おうとしたときに、階層にアイテムを追加する処理の実装にかなりてこずったのでメモ

QTreeViewの子アイテム達

そして上のコードはこちら

void MainWindow::MakeMenuTree(void)
{
QList mt_childs;
QStandardItem *mt_items, *item0, *item1;

mt_items = new QStandardItem(0, 0);

item0 = new QStandardItem(0, 0);
item0->setIcon(QIcon(":/main/icons/music-playlist.png"));
item0->setData(tr("プレイリスト"), Qt::EditRole);
mt_items->insertRow(0, item0);

item1 = new QStandardItem(0, 0);
item1->setIcon(QIcon(":/main/icons/musics0.png"));
item1->setData(tr("ライブラリ"), Qt::EditRole);
mt_items->insertRow(1, item1);

mt_childs.append(mt_items);

mt_columns->insertRow(0, mt_childs);
mt_columns->setData(mt_columns->index(0, 0),
QIcon(":/main/icons/computer.png"),
Qt::DecorationRole);
mt_columns->setData(mt_columns->index(0, 0),
tr("コンピューター"));
}

変数は沢山あるが、基本的にQStandardItemを使ってアイテムを追加したり挿入したりするということを覚えておけば問題はない。

単純な子アイテムであれば、item0やitem1のような単体の変数。
親アイテムであれば、QListを利用して QStandardItem のコンテナを作り、それを挿入する。

コードの11行目と16行目では、insertRow関数 で子アイテム(item0, item1)を挿入しているが、ここでは QList によるコンテナを挿入するように第2引数で指定することもできる。

ちなみに、10、15行目のように、setData関数 でアイテムに文字列を設定する際には、必ず第2引数(role)に Qt::EditRole を指定する必要がある。(アイコンの場合は Qt::DecorationRole