GTK列表显示文本和图片

使用GtkTreeView控件显示包含文本和图片的列表,GtkTreeView/GtkListStore或者GtkTreeView/GtkTreeModel使用的是MVC设计理念。
关于MVC:

M层: model 数据模型层(处理数据的增删改查) 提供数据
V层: Views 视图层 (数据展示) 渲染数据
C层: controller 控制层(处理业务逻辑) 调用数据渲染视图
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。

GtkListStore、GtkTreeModel、GtkTreeView
GtkListStore 一个能被GtkTreeView使用的列表数据结构
GtkTreeModel 是GtkTreeView的接口
通过GTK_TREE_MODEL宏可以将GtkListStore转换成GtkTreeModel
代码


#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *treeview;
    GtkListStore *liststore;
    GtkTreeViewColumn *column;
    GtkCellRenderer *cell;
    GtkTreeIter iter;
    GdkPixbuf *pixbuf;

    // 初始化GTK
    gtk_init(&argc, &argv);

    // 创建窗口
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

    // 创建列表存储
    liststore = gtk_list_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING);

    // 添加图像和文本到列表存储
    pixbuf = gdk_pixbuf_new_from_file("image.jpg", NULL);
    gtk_list_store_append(liststore, &iter);
    gtk_list_store_set(liststore, &iter, 0, pixbuf, 1, "Image 1", -1);//添加图片和文本到行
    g_object_unref(pixbuf);//释放资源

    pixbuf = gdk_pixbuf_new_from_file("image2.jpg", NULL);
    gtk_list_store_append(liststore, &iter);
    gtk_list_store_set(liststore, &iter, 0, pixbuf, 1, "Image 2", -1);
    g_object_unref(pixbuf);

    // 创建列表视图
    treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));

    // 创建图像列
    cell = gtk_cell_renderer_pixbuf_new();
    column = gtk_tree_view_column_new_with_attributes("Image", cell, "pixbuf", 0, NULL);//创建名为Image的图像列
    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);//添加图像列

    // 创建文本列
    cell = gtk_cell_renderer_text_new();
    column = gtk_tree_view_column_new_with_attributes("Text", cell, "text", 1, NULL);//创建名为Text的文本列
    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);//添加文本列

    // 将列表视图添加到窗口中
    gtk_container_add(GTK_CONTAINER(window), treeview);

    // 显示窗口
    gtk_widget_show_all(window);

    // 运行主循环
    gtk_main();

    return 0;
}

结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百口可乐__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值