我有以下代码来查找是否选中了行,选择了哪个行以及哪个文本位于GtkTreeView的行中。代码在密钥释放事件处理程序中。
char *ntext;
if (gtk_tree_selection_get_selected(treeselen, &modelen ,&iteren))
{
gtk_tree_model_get(modelen, &iteren, cEng, &ntext, -1);
... etc...
当我的视图不为空时,这可以正常工作。但是当列表为空时,我会得到“分段错误”。 我认为在此之前需要检查GtkTreeView是否为空。
怎么做?
实际上,后来我发现如果列表部分填充点击未填充区域也会发生段错误。所以我也需要解决方案。
答案 0 :(得分:1)
根据您的说明,当您说GtkTreeView
为空时,您的意思是模型(GtkTreeModel
由GtkListStore
或{{3}实施与您的GtkTreeView
相关联的数据行已添加但是为空,即未设置数据。在这种情况下,您需要检查gtk_tree_model_get
返回的值(假设cEng
有效,否则您将在运行程序时收到警告消息)。问题主要在...etc...
。只需在NULL
之前添加ntext
支票即可。
char *ntext;
if (gtk_tree_selection_get_selected(treeselen, &modelen ,&iteren))
{
gtk_tree_model_get(modelen, &iteren, cEng, &ntext, -1);
if( ntext == NULL )
{
printf("Data is NULL!\n");
/* Handle this case */
}
else
{
.... etc ....
}
}
这也可能是你按下按钮或释放回调的情况。
希望这有帮助!