選択した行の後に新しい行を追加する

概要

挿入自体は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」ボタンを押すと選択した行の後ろに新しい行が追加される。