从Gtk :: TreeStore删除图像的整洁方法

时间:2012-07-13 12:33:21

标签: c++ gtk gtktreeview

我有一个带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 :: TreeView行删除一个不会产生任何Gtk警告的图像?

我取消选择文件夹的代码在这里: https://github.com/mc-suchecki/Imagine/blob/master/core/core.cpp#L207

非常感谢你,对不起我的英语。

1 个答案:

答案 0 :(得分:1)

如果要删除图像而不是visible属性,请将stock-id属性更改为false。