IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 第60页的gtk+编程例子——复合框 -> 正文阅读

[系统运维]第60页的gtk+编程例子——复合框

主要是参考gtk3-demo中combo boxes例子中的源代码来改写而成的,源代码篇幅很长的,我也是用A4纸打印出来反复看才阅读明白,其实也不完全明白
以下gtk+编程例子是来自书籍《实用技术:开发Linux应用——用GTK+和GDK开发Linux图形用户界面应用》第60页的内容——复合框,创建数据库store的方法与第56页的gtk+编程例子——列表框的写法一样,区别就是多了这个函数gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE),就是combo_box本身就是一个容器
在openSUSE-Leap-15.3-DVD-x86_64的gnome3.34.7桌面环境下编译的,其中pkg-config --cflags --libs gtk±3.0两边有反引号括起来的
ruhong@localhost:~/gtk> gcc page60.c -o page56 pkg-config --cflags --libs gtk±3.0
ruhong@localhost:~/gtk> ./page60

/* the example on page 60 */

#include <gtk/gtk.h>
/* 准备材料,自定义函数  */
	/*  comments注释  */
enum
{
	DISTRICT,
	NUM_COLUMNS
	/*  NUM_COLUMNS是指列数,本程序只有1列,所以它的值是1 */
};

static GtkTreeModel *create_and_fill_model (void)
{
	GtkListStore *store;
	/* 声明变量store为数据库*/
	GtkTreeIter iter;
	/* 声明变量iter为迭代器 */
	store=gtk_list_store_new (1, G_TYPE_STRING);
	/* 数字1是指1列,越秀区、荔湾区等都是文本字符串,类型都是是G_TYPE_STRING */
	gtk_list_store_append (store, &iter);
	/* 可以理解为在数据库store中创建一个空行iter*/
	gtk_list_store_set (store, &iter, DISTRICT, "越秀区", -1);
	/* 可以理解为在空行iter写入数据*/
	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "荔湾区", -1);

	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "海珠区", -1);

	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "天河区", -1);

	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "白云区", -1);

	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "黄埔区", -1);

	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "番禺区", -1);

	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "花都区", -1);

	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "南沙区", -1);

	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "增城区", -1);

	gtk_list_store_append (store, &iter);
	gtk_list_store_set (store, &iter, DISTRICT, "从化区", -1);
	return GTK_TREE_MODEL (store);
}


/* 程序主体 */
int main( int argc, char *argv[] )
{
	GtkWidget *window;
	/* 声明变量window为构件gtkwidget */
	GtkWidget *combo;
	/* 声明变量combo为构件 */
	GtkTreeModel *model;
	/* 声明变量model为模型 */
	GtkCellRenderer *renderer;
	/* 声明变量renderer为渲染器 */
	gtk_init (&argc, &argv);
	/* 初始化gtk */

	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	/*  创建顶级窗口 */
	gtk_window_set_title (GTK_WINDOW (window), "广州市有11个区你在那个区?");
	/*  为窗口顶部加上标题为广州市有11个区你在那个区?  */
	g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
	/*  为窗口加上动作,当收到destroy信号,就启动gtk_main_quit事件,gtk_main_quit就是鼠标单击窗口右上角的关闭按钮就终止程序  */
	gtk_container_set_border_width (GTK_CONTAINER (window), 100);
	/*  简单的理解是将窗口变成容器,可以装入其它构件,宽度为100像数  */

	model = create_and_fill_model ();
	/*  创建model模型 */
	combo = gtk_combo_box_new_with_model (model);
	/*  将combo构件与model模型联系起来 */
	g_object_unref (model);
	renderer = gtk_cell_renderer_text_new ();
	/* 可以理解为创建一个新的空列renderer*/
	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
	/*  将空列renderer装入combo容器 */
	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer, "text", DISTRICT, NULL);
	/* 可以理解为在空列renderer写入数据*/
	gtk_container_add (GTK_CONTAINER (window), combo);
	/*  简单的理解是将combo构件装入窗口容器 */
	
	gtk_widget_show (combo);
	/*  显示combo构件  */
	gtk_widget_show (window);
	/*  显示构件窗口  */
	gtk_main ();
	/*  进入主循环,等待信号(鼠标键盘)输入  */
	return 0;
}

效果图如下
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 14:09:05  更:2022-02-06 14:10:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:45:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码