c++ - 从 Gtk::TreeStore 中删除图像的整洁方法

标签 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 '翻译' Gtk::StockId 在 'dir_columns.stock_id' 中找到 到位于树中的图像。当我像这样将图像添加到行时:

//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

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

最佳答案

如果您想去掉图像,请将 visible 属性更改为 false,而不是将 stock-id 属性更改为 false。

关于c++ - 从 Gtk::TreeStore 中删除图像的整洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11470607/

相关文章:

gtk - 如何确定我在 centos 上使用的 gtk+ 版本?

c - GTK treeview 添加 'key-press-event' 信号

mono - 如何正确使用GtkTreeView

c++ - GTKmm - 如何将 pixbuf 放入 TreeView 中

c++ - 如何在类的头文件中定义一个 const double?

c++ - std::string 构造函数如何处理固定大小的 char[]?

c++ - 使用 LLVM-Clang 隐式实例化私有(private) C++ 模板的链接器错误

c++ - 如何在命令行中输入?

opencv - 运行时 Opencv HighGui 错误 - "HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP"。 opencv交叉编译。主机=64 位 Ubuntu 12.04。目标=ARM-Cortex-A9

python - 对模型进行过滤和排序的 GtkTreeView 的拖放支持