免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4359 | 回复: 4
打印 上一主题 下一主题

GtkTreeView显示网格问题? [复制链接]

论坛徽章:
1
2015亚冠之莱赫维亚
日期:2015-06-27 00:56:13
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-04 17:58 |只看该作者 |倒序浏览
GtkTreeView能显示类似于二维表中的网格吗?

论坛徽章:
0
2 [报告]
发表于 2007-01-05 12:38 |只看该作者
gtk_tree_view_set_grid_lines() 函数可以用来设置网格,不过至少要求 GTK+ 2.10 版。

论坛徽章:
1
2015亚冠之莱赫维亚
日期:2015-06-27 00:56:13
3 [报告]
发表于 2007-01-05 16:58 |只看该作者

GtkTreeView显示网格问题?

谢谢版主的热心帮助,我用gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW(view), TRUE)及gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(view), GTK_TREE_VIEW_GRID_LINES_BOTH)函数测试,还是不能显示,提示如下:
Gdk-CRITICAL **: gdk_gc_new: assertion `drawable != NULL' failed
Gdk-CRITICAL **: gdk_gc_copy: assertion `GDK_IS_GC (dst_gc)' failed
Gdk-CRITICAL **: gdk_gc_set_values: assertion `GDK_IS_GC (gc)' failed
Gdk-CRITICAL **: gdk_gc_set_dashes: assertion `GDK_IS_GC (gc)' failed

不知道这是什么原因?

有人做过这块吗?

论坛徽章:
1
2015亚冠之莱赫维亚
日期:2015-06-27 00:56:13
4 [报告]
发表于 2007-01-05 17:22 |只看该作者

GtkTreeView显示网格问题?

我测试代码如下:
#include <gtk/gtk.h>

enum
{
  COL_NAME = 0,
  COL_AGE,
  NUM_COLS
} ;

static GtkTreeModel *create_and_fill_model (void)
{
        GtkListStore *store;
        GtkTreeIter iter;
        store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_UINT);
        /* Append a row and fill in some data */
        gtk_list_store_append (store, &iter);
        gtk_list_store_set (store, &iter, COL_NAME, "Heinz El-Mann", COL_AGE, 51, -1);
        /* append another row and fill in some data */
        gtk_list_store_append (store, &iter);
        gtk_list_store_set (store, &iter, COL_NAME, "Jane Doe", COL_AGE, 23, -1);

        gtk_list_store_append (store, &iter);
        gtk_list_store_set (store, &iter,        COL_NAME, "Joe Bungop",        COL_AGE, 91, -1);
       
        return GTK_TREE_MODEL (store);
}

static GtkWidget *create_view_and_model (void)
{
        GtkCellRenderer *renderer;
        GtkTreeModel *model;
        GtkWidget *view;
        view = gtk_tree_view_new ();
       
        gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW(view), TRUE);
    gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(view), GTK_TREE_VIEW_GRID_LINES_BOTH);
       
        /* --- Column #1 --- */
        renderer = gtk_cell_renderer_text_new ();
        gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), -1, "Name", renderer, "text", COL_NAME, NULL);
        /* --- Column #2 --- */
        renderer = gtk_cell_renderer_text_new ();
        gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), -1, "Age", renderer, "text", COL_AGE, NULL);
        model = create_and_fill_model ();
        gtk_tree_view_set_model (GTK_TREE_VIEW (view), model);
        /* The tree view has acquired its own reference to the
         * model, so we can drop ours. That way the model will
         * be freed automatically when the tree view is destroyed
         */
        g_object_unref (model);
       
        return view;
}

int main (int argc, char **argv)
{
        GtkWidget *window;
        GtkWidget *view;
       
        gtk_init (&argc, &argv);
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        g_signal_connect (window, "delete_event", gtk_main_quit, NULL);
        view = create_view_and_model ();
        gtk_container_add (GTK_CONTAINER (window), view);
        gtk_widget_show_all (window);
        gtk_main ();
       
        return 0;
}


GTK版本:2.10.6

论坛徽章:
0
5 [报告]
发表于 2007-01-05 20:50 |只看该作者
似乎目前的 GTK+ 中 gtk_tree_view_set_grid_lines() 这个函数存在着一个 Bug。这个版本的 GTK+ 软件包中 gtk/gtktreeview.c 的第 14626 行是
  1. if (!GTK_WIDGET_REALIZED (widget))
复制代码

将它修改为
  1. if (GTK_WIDGET_REALIZED (widget))
复制代码

然后再重新编译和安装 GTK+ 库。

gtk_tree_view_set_enable_tree_lines() 仅对有子项目的列表(树形列表)有效,对于普通列表项(如你的程序显示的表)其作用是表现不出来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP