Gtk::TreeView のダイアログ ウィンドウがあります。このダイアログには、メインのファイルシステム ツリーが表示され、ディスク上のフォルダを選択するオプションが提供されます。ユーザーがフォルダーを選択すると、そのフォルダーを表す行に Gtk::Stock 画像を追加しています。
これを行うために、ツリーの最後の列に関連付けられた Gtk::CellRendererPixbuf を作成しました。
//appending columns
directory_tree.append_column("Folder List", dir_columns.name);
Gtk::TreeViewColumn *column = directory_tree.get_column(0);
if(column) column->set_expand(true);
Gtk::CellRendererPixbuf *cell = Gtk::manage(new Gtk::CellRendererPixbuf);
directory_tree.append_column("", *cell);
column = directory_tree.get_column(1);
if(column) column->add_attribute(cell->property_stock_id(), dir_columns.stock_id);
このコードへのリンク: https://github.com/mc-suchecki/Imagine/blob/master/gui/dialogs.cpp#L47
Gtk::CellRendererPixbuf は、「dir_columns.stock_id」にある Gtk::StockId をツリーにある画像に「変換」します。次のように行に画像を追加すると:
//selecting folder
(*folder)[fs_columns.stock_id] = Gtk::StockID(Gtk::Stock::FIND).get_string();
(*folder)[fs_columns.included] = true;
すべて問題ありませんが、この方法で画像を削除しようとすると:
//unselecting folder
(*folder)[fs_columns.stock_id] = "";
(*folder)[fs_columns.included] = false;
画像は正しく消えますが、コマンド ラインに次のようなエラーが表示されます (これは正確なメッセージではありません。アプリケーションを起動できるようになったら投稿します)。
(imagine:9376): Gtk-WARNING **: Gtk StockId not found
もちろん、警告の理由は明らかです (空白の名前に関連付けられた StockId アイテムはありません) が、私の質問は次のとおりです: Gtk 警告を生成しない Gtk::TreeView 行から画像を削除する方法はありますか?
フォルダーの選択を解除するコードは次のとおりです: https://github.com/mc-suchecki/Imagine/blob/master/core/core.cpp#L207
よろしくお願いします。私の英語で申し訳ありません。