リストビューの特定列の背景色を変更
概要
リストビューの特定列の背景色を変更する。まず Gtk::TreeView が Gtk::TreeModel の列を描画するために使うレンダラクラス( Gtk::CellRenderer ) を取得する。i 行目のレンダラは Gtk::TreeView::get_column_cell_renderer( i ) で取得できるので、あとは Gtk::CellRenderer::property_cell_background_gdkプロパティに背景色を指定するだけでよい。
ソース
listview4.cpp#include <gtkmm.h> class MainWin : public Gtk::Window { Gtk::ScrolledWindow m_scrwin; Gtk::TreeView m_treeview; Gtk::TreeModelColumn< int > m_col_num; Gtk::TreeModelColumn< Glib::ustring > m_col_name; Gtk::TreeModel::ColumnRecord m_record; Glib::RefPtr< Gtk::ListStore > m_liststore; public: MainWin(); }; MainWin::MainWin() { // モデルとビューを作成 m_record.add( m_col_num ); m_record.add( m_col_name ); m_liststore = Gtk::ListStore::create( m_record ); m_treeview.set_model( m_liststore ); // ビューに表示する列を指定 m_treeview.append_column( "番号", m_col_num ); m_treeview.append_column( "名前", m_col_name ); // セルの背景色を指定 Gtk::CellRenderer* render = m_treeview.get_column_cell_renderer( 1 ); if( render ) render->property_cell_background_gdk() = Gdk::Color( "red" ); // モデルに行を追加 Gtk::TreeModel::Row row; for( int i = 0; i < 10; ++i ){ row = *( m_liststore->append() ); row[ m_col_num ] = i; row[ m_col_name ] = "ほげ"; } m_scrwin.add( m_treeview ); add( m_scrwin ); show_all_children(); resize( 200,200 ); } int main( int argc, char *argv[] ) { Gtk::Main kit( argc, argv ); MainWin mainwin; Gtk::Main::run( mainwin ); return 0; }
コンパイル
必要なコンパイルオプションは pkg-config を使って取得する。g++ listview5.cpp -o listview5 `pkg-config gtkmm-2.4 --cflags --libs`
結果
