ツリーの内容を表示する
概要
ある行のある列の中身は値をセットしたときと同様にして、行(Gtk::TreeModel::Row row)を 取得してから row[ m_record.m_col_name ] により取得できる。
また複数行のイテレータ( Gtk::TreeModel::iterator )は Gtk::TreeModel::children().begin() または Gtk::TreeModel::Row::children().begin() によって取得できる。前者はルートの直下にある行のイテレータを 後者はある行のサブディレクトリにある行のイテレータを取得する。 よってイテレータをデレファレンスすることによって Gtk::TreeModel::Row を順次取得できる。 下の例では再帰的にツリーを捜査することによりツリーの全ての行の内容を表示している。
ソース
前回使用した treeview2.cppの void MainWin::on_bt_clicked() を下のものに置き換え、 メソッド void MainWin::show_children( Gtk::TreeModel::Children children ) を追加する。treeview3.cpp
// // childern の中身を表示 // void MainWin::show_children( Gtk::TreeModel::Children children ) { Gtk::TreeModel::iterator it = children.begin(); for( ; it != children.end(); ++it ) { Gtk::TreeModel::Row row = *it; std::cout << row[ m_record.m_col_name ] << std::endl; show_children( row.children() ); // サブディレクトリの中を再帰表示 } } // ボタンを押すと呼ばれる void MainWin::on_bt_clicked() { show_children( m_treestore->children() ); }
コンパイル
必要なコンパイルオプションは pkg-config を使って取得する。g++ treeview3.cpp -o treeview3 `pkg-config gtkmm-2.4 --cflags --libs`
結果
ボタンを押すとツリーの内容が表示される
ルート1 サブ1 サブ2 サブサブ1 サブサブ2 サブサブ3 サブ3 サブサブ4 サブサブ5 ルート2