在具有多行的 GtkTreeView 中,如何以编程方式更新特定行上的 GtkCellRendererCombo 模型
In a GtkTreeView with multiple rows, how can I programmatically update the model of a GtkCellRendererCombo on a specific line?
我正在编写一个使用 C/C++ 和 Glade 3 作为 GUI 的应用程序。
GUI 的一部分,包括一个多行TreeView
其中每行代表一个用户。第二列有一个代表产品品牌的CellRendererCombo
,第三列有另一个代表产品的CellRendererCombo
。
我要做的是:每当我为用户设置产品品牌(第 2 列)时,我希望产品CellRendererCombo
的选项(在第 3 列中)仅显示该品牌的产品。
我尝试用g_object_set
更新模型,但这更新了列中的所有CellRendererCombo
。
正如您发现的那样,使用 g_object_set
为组合框设置模型,为整个列设置模型。您需要做的是在用于树视图的模型中有一列 (COLUMN_COMBOBOX_MODEL),该列存储对要在组合框中用于每一行的模型的引用,并执行类似 gtk_tree_view_column_add_attribute (column, combobox_renderer, "model", COLUMN_COMBOBOX_MODEL)
的操作,将单元格渲染器的 model
属性映射到每一行的正确模型。您仍然可以使用 g_object_set 来设置单元格渲染器的"text-column"
和"editable"
属性。
在 Glade
:- 我需要做的是将
GtkTreeModel
类型的新列添加到我的TreeView
模型中。不幸的是,GtkTreeModel
不是 Glade 在创建列时提供的下拉列表的一部分,因此我手动键入GtkTreemodel
到类型列。 - 然后,我编辑了表示产品的
CellRendererCombo
,并将刚刚创建的列定义为模型。
在源代码中:
当我将数据加载到
TreeView
的模型中时,我为每一行创建一个新ListStore
,并在TreeView
模型中存储对它的引用。gtk_list_store_set (GTK_LIST_STORE(data->liststore_analysis), &iter, COLUMN_MODEL, GTK_LIST_STORE(data->liststore_products), -1);
当我更改表示品牌的
CellRendererCombo
的值时,我会更新模型中其他CellRendererCombo
的行。GtkListStore * list = GTK_LIST_STORE(data->liststore_products); GtkTreeIter iter; const char * openmoko[] = {"Neo 1973","Neo FreeRunner","Dash Express","3D7K","WikiReader"}; int i, openmokoModels = sizeof (openmoko) / sizeof (*openmoko); for (i = 0; i < openmokoModels; i++){ gtk_list_store_append(list, &iter); gtk_list_store_set(list, &iter, 0, openmoko[i], -1); }
谢谢你们的帮助! :)
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- cmake更新缓存的变量
- 创建引用向量的优雅方式
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 更新到莫哈韦后出现cmath错误
- ARM NEON aarch64:如何以优化的方式比较和更新 neon 寄存器
- 从线程更新进度条的最佳方式
- 如何使用C++以编程方式更新组策略
- 运行后台"algrothim"更新小部件Qt的最佳方式
- 在具有多行的 GtkTreeView 中,如何以编程方式更新特定行上的 GtkCellRendererCombo 模型
- 如何以原子方式更新 HWND 的样式和位置?
- 我需要更新一个向量的指针在c++中以独特的方式
- 通过逻辑层中的类转发QProgressBar更新的正确方式是什么
- 对纹理进行增量更新的最佳方式?(渲染到纹理)