選択した行の後に新しい行を追加する
概要
挿入自体はGtk::TreeStore::insert_after()で出来るが、選択した行を取得するには
(1) Gtk::TreeView::get_selection()で Gtk::TreeSelection を取得して
(2) Gtk::TreeSelection::get_selected() により選択した行のイテレータを取得し
(3) イテレータをデレファレンス
して取得する必要がある。
ソース
前々回使用した treeview2.cppの void MainWin::on_bt_clicked() を下のものに置き換える。treeview4.cpp
// スロット関数 void MainWin::on_bt_clicked() { Glib::RefPtr< Gtk::TreeSelection > selection = m_treeview.get_selection(); Gtk::TreeModel::iterator it = selection->get_selected(); if( it ){ Gtk::TreeModel::Row row = *it; std::cout << "insert after " << row[ m_record.m_col_name ] << std::endl; row = *( m_treestore->insert_after( row ) ); row[ m_record.m_col_name ] = "新行"; } }
コンパイル
必要なコンパイルオプションは pkg-config を使って取得する。g++ treeview4.cpp -o treeview4 `pkg-config gtkmm-2.4 --cflags --libs`
結果
任意の行をクリックしてから上部の「push」ボタンを押すと選択した行の後ろに新しい行が追加される。