没有列标题栏的 TreeView 或 ListView

TreeView or ListView without column title bar

有没有办法在没有列标题栏的情况下在 TreeView 或 ListView 中显示数据?

当您谈论列标题栏而不显示任何代码时,我认为您是在询问 Header。

如果是这样,那么这就是您需要的功能:

gtk_tree_view_set_headers_visible()

此处 headers_visible 设置为 TRUE(默认):

此处 headers_visible 设置为 FALSE:

这是一个示例代码:

#include <gtk/gtk.h>

GtkWidget    *create_window ( void );
GtkWidget    *create_scrolled_window ( void );
GtkWidget    *create_tree_view ( void );
GtkListStore *create_list_store ( void );

int main ( void )
{
    GtkWidget *window;
    GtkWidget *scrolled_window;
    GtkWidget *tree_view;

    /// ***
    gtk_init ( NULL, NULL );

    /// ***
    window = create_window();

    /// ***
    ///scrolled_window = gtk_scrolled_window_new ( NULL, NULL );
    scrolled_window = create_scrolled_window ( );
    gtk_scrolled_window_set_kinetic_scrolling ( GTK_SCROLLED_WINDOW ( scrolled_window ), TRUE );
    gtk_scrolled_window_set_capture_button_press ( GTK_SCROLLED_WINDOW ( scrolled_window ), TRUE );

    /// ***
    tree_view = create_tree_view ( );
    gtk_container_add ( GTK_CONTAINER ( scrolled_window ), tree_view );
    gtk_container_add ( GTK_CONTAINER ( window ), scrolled_window );

    /// ***
    gtk_widget_show_all ( window );

    // ***
    gtk_widget_show_all ( window );
    gtk_main ();
}

GtkWidget *create_window ( void )
{
    GtkWidget *window;

    /// ***
    window = gtk_window_new ( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_default_size ( GTK_WINDOW ( window ), 150, 150 );
    gtk_container_set_border_width ( GTK_CONTAINER ( window ), 5 );

    /// ***
    g_signal_connect ( window, "delete_event", G_CALLBACK ( gtk_main_quit ), NULL );

    /// ***
    return window;
}

GtkWidget *create_scrolled_window ( void )
{
    GtkWidget *scrolled_window;

    /// ***
    scrolled_window = gtk_scrolled_window_new ( NULL, NULL );
    gtk_scrolled_window_set_kinetic_scrolling ( GTK_SCROLLED_WINDOW ( scrolled_window ), TRUE );
    gtk_scrolled_window_set_capture_button_press ( GTK_SCROLLED_WINDOW ( scrolled_window ), TRUE );

    /// ***
    return scrolled_window;
}

GtkListStore *create_list_store ( void )
{
    GtkListStore *list_store;
    list_store = gtk_list_store_new ( 1, G_TYPE_STRING );

    /// ***
    for ( gint i = 0; i < 10; i++ )
    {
        GtkTreeIter iter;
        gchar *label = g_strdup_printf ( "Row number %d", i );

        /// ***
        gtk_list_store_append ( list_store, &iter );
        gtk_list_store_set ( list_store, &iter, 0, label, -1 );

        /// ***
        g_free ( label );
    }

    return list_store;
}

GtkWidget *create_tree_view ( void )
{
    GtkWidget       *tree_view;
    GtkCellRenderer *renderer;
    GtkListStore    *store;

    /// ***
    tree_view = gtk_tree_view_new ();
    store     = create_list_store();

    /// ***
    renderer = gtk_cell_renderer_text_new ();
    g_object_set ( renderer, "editable", TRUE, NULL );

    /// **
    gtk_tree_view_insert_column_with_attributes ( GTK_TREE_VIEW ( tree_view ),
            0, "This is the Title",
            renderer,
            "text", 0,
            NULL );

    /// ***
    gtk_tree_view_set_model ( GTK_TREE_VIEW ( tree_view ), GTK_TREE_MODEL ( store ) );
    g_object_unref ( store );

    /// ***
    gtk_tree_view_set_headers_visible ( GTK_TREE_VIEW ( tree_view ), FALSE );

    /// ***
    return tree_view;
}