GTK列表显示文本和图片

news2024/12/24 9:07:28

使用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;
}

结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/745906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UI框架-uView】Input输入框如何使用前后槽?

【UI框架-uView】Input输入框如何使用前后槽&#xff1f; 官方链接如下&#xff1a;Input输入框 - 前后槽 前槽如下&#xff1a; 后槽如下&#xff1a; 可以看到&#xff0c;前后槽的灵活使用&#xff0c;不仅方便我们的布局&#xff0c;还可以在input中实现复杂的应用。 注意…

Vue 组件化开发

文章目录 前言组件化开发父子组件相互传数据父传子&#xff1a;自定义属性子传父&#xff1a;自定义事件父子组件互传案例 插槽 slot多个插槽 总结组件化开发总结Vue组件的基本组成子组件使用的三个步骤父子组件相互传递数据 前言 提示&#xff1a;这里可以添加本文要记录的大…

jenkins 创建项目的ci

一.创建视图 1.点击加号 选择列表视图 2.输入名称&#xff0c;点击确定 二.创建任务 1.点击到你新建的视图之后&#xff0c;再点击文本中的创建一个新的任务。 2.进入创建页面后首先填写描述 三.选择丢弃旧的构建 保持构建的天数是指&#xff1a;是指保留多少天内的构建 …

【基于FPGA的芯片设计】RISC-V的20条指令CPU设计

实验板卡&#xff1a;xc7a100tlc sg324-2L&#xff0c;共20个开关 实验要求&#xff1a;

【C#】并行编程实战:同步原语(1)

在第4章中讨论了并行编程的潜在问题&#xff0c;其中之一就是同步开销。当将工作分解为多个工作项并由任务处理时&#xff0c;就需要同步每个线程的结果。线程局部存储和分区局部存储&#xff0c;某种程度上可以解决同步问题。但是&#xff0c;当数据共享时&#xff0c;就需要用…

Chrome内建DNS导致的解析错误修复

Index Chrome内建DNSDisable Async DNS resolver Chrome内建DNS 实际上 , Chrome在使用自己的DNS来进行域名的解析 , 这导致有时候一些域名解析会出现错误 , 导致访问速度变慢 , 例如 blog.csdn.net 使用谷歌的 8.8.8.8 dns解析就会 , 解析到香港的ip上去 , 导致访问速度变慢 …

群晖NAS:docker查询注册表失败解决方案 docker安装网心云、mysql等

群晖NAS&#xff1a;docker查询注册表失败解决方案 差不多2023年4月底开始的&#xff0c;docker内不能直接搜索注册表。据说是有人在库里放了一些有意思的东西&#xff0c;被和谐掉了&#xff0c;所以也别指望什么时候能解封。 网上很多案例&#xff0c;都不能用。还有奇葩的…

史上最细接口测试详解,接口测试从0到1实施,一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、接口测试描述定…

【C语言】-- 死循环了怎么办?

#include <stdio.h> int main() {int i 0;int arr[] {1,2,3,4,5,6,7,8,9,10};for(i0; i<12; i){arr[i] 0;printf("hello\n");}return 0; } 阅读上面这个代码&#xff0c;我们会认为这不就是简单的数组访问越界么。那么这段代码就应该会报错&#xff0c;…

macOS Sonoma 14beta 3 (23A5286i)第二个更新「附黑/白苹果镜像下载」

系统镜像下载&#xff1a; 系统介绍 黑果魏叔 7 月12 日消息&#xff0c;苹果今天发布 macOS Sonoma 14.0 Beta 3&#xff08;内部版本号&#xff1a;23A5286i&#xff09;第二个更新。 目前尚不清楚苹果为什么要发布 macOS Sonoma Beta 3 的第二个版本&#xff0c;但它可能…

外包干了2年,我裸辞了...

我25岁&#xff0c;中级测试&#xff0c;外包&#xff0c;薪资13.5k&#xff0c;人在上海。内卷什么的就不说了&#xff0c;而且人在外包那些高级精英年薪大几十的咱也接触不到&#xff0c;就说说外包吧。 假设以我为界限&#xff0c;25岁一线城市13.5k&#xff0c;那22-24大部…

CUDA11.1、cuDNN8.6.0、Tensorrt8.5.3,ubuntu20.04安装过程记录

CUD11.1 下载地址&#xff1a;CUDA Toolkit Archive | NVIDIA Developer 安装&#xff1a; wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run sudo sh cuda_11.1.1_455.32.00_linux.run 对于不是sudo用户&…

CRYPTO-36D-飞鸽传书

0x00 前言 CTF 加解密合集&#xff1a;CTF 加解密合集 0x01 题目 TVdJd09HRm1NamMyWkdKak56VTVNekkzTVdZMFpXVTJNVFl5T0Rrek1qUWxNRUZsTW1GbE0yRXlNelV3TnpRell6VXhObU5rWVRReE1qUTVPV0poTTJKbE9TVXdRV0prWlRVeVkySXpNV1JsTXpObE5EWXlORFZsTURWbVltUmlaRFptWWpJMEpUQkJaVEl6…

Jmeter性能测试插件jpgc的安装

目录 一、获取插件包 1.访问官网获取 2.百度网盘下载 二、安装路径 三、安装插件 1.重启Jmeter 2.进入Plugins Manager 3.jpgc插件安装 4.安装完成后检查 总结&#xff1a; 一、获取插件包 1.访问官网获取 官网地址&#xff1a; ​ 2.百度网盘下载 链接&#xff1…

LiveGBS 国标平台作为下级GB28181级联到海康大华宇视华为等第三方国标平台的操作步骤说明

LiveGBS 国标平台作为下级GB28181级联到海康大华宇视华为等第三方国标平台的操作步骤说明 1、什么是GB/T28181级联2、搭建GB28181国标流媒体平台3、获取上级平台接入信息3.1、如何提供信息给上级3.2、上级国标平台如何添加下级域3.2、接入LiveGBS示例 4、配置国标级联4.1、国标…

Go语言对json处理总结

实际业务开发中&#xff0c;json处理很常见&#xff0c;本文总结一下go语言对json的处理。 目录 1.encoding/json 包 1.1 Marshal 函数 &#xff08;1&#xff09;原始字段名 &#xff08;2&#xff09;字段重命名 1.2 Unmarshal函数 &#xff08;1&#xff09;原始字段…

ELK-日志服务【logstash-安装与使用】

目录 【1】安装logstash logstash input 插件的作用与使用方式 【2】input --> stdin插件&#xff1a;从标准输入读取数据&#xff0c;从标准输出中输出内容 【3】input -- > file插件&#xff1a;从文件中读取数据 【4】input -- > beat插件&#xff1a;从filebe…

目标检测学习

目录 1、目标定位 2、特征点检测 3、目标检测 4、滑动窗口的卷积实现 5、Bounding Box 预测&#xff08;Bounding box predictions&#xff09; 6、交并化 7、非极大值抑制 8、Anchor Boxes 9、YOLO算法 1、目标定位 2、特征点检测 如何检测特征点&#xff08;以人的部…

基于linux下的高并发服务器开发(第一章)- 静态库的制作1.4

01 / 什么是库 库文件是计算机上的一类文件&#xff0c;可以简单的把库文件看成一种代码仓库&#xff0c;它提供给使用者一些可以直接拿来用的变量、函数或类库是特殊的一种程序&#xff0c;编写库的程序和编写一般的程序区别不大&#xff0c;只是库不能单独运行。库文件有两种…

如何选择适合外贸公司的企业邮箱?推荐哪些优质企业邮箱服务?

为外贸公司选择合适的企业邮箱是企业成功经营的关键。强大、安全、直观的企业邮箱能够满足不同平台上不同用户的需求&#xff0c;这是确保数据和消息与客户和合作伙伴准确沟通的关键。以下是外贸公司在选择企业邮箱时应考虑的一些规范: 1、安全 在考虑企业邮箱时&#xff0c;安…