【转】GTK编程——构件的显现、映射和显示

GTK+3.0加Glade3 编程时可能遇到的问题详解 LZ在写作业时,自己切身遇到的问题以及最终经过研究得出的解决方案。 所做实验的代码test.c如下: #include void on_mainLoginWindow_destroy(){ } int main(int argc, char *argv[]) {     GtkBuilder *builder;     GtkWidget *window;     g 阅读详情

原文:http://www.yuanma.org/data/2009/0401/article_3603.htm

 

内容摘要 在典型的用户代码中,只需调用gtk_widget_show()函数。这暗含当它的父构件一旦被显现和映射,该构件就被显现和映射。要理解的是: gtk_widget_show()函数并不会立即生效,这一点很重要,它仅仅是确定构件被显示出来的时间。也就是说,不用担心显示构件的顺序(不必一定要先显示子构件,再显示父构件)。但是,这时还不能立即访问这个构件的GdkWindow窗口。有时,又确实需要在映射之前访问构件的GdkWindow 窗口;在这样的情况下,要手工调用gtk_widget_realize()函数来创建这个GdkWindow。如果机会适当, gtk_widget_realize()函数还会显现构件的父构件。使用gtk_widget_realize()函数的情况是不多见的,如果感觉到一定要这么做时,也许是使用了不正确的方法。

 

构件可以按它们是否有GdkWindow窗口分类。有两种Gtk+ 构件,一种有一个相关联的GdkWindow窗口,另一种没有。大多数构件都有一个相关联的GdkWindow窗口,构件就绘制在这个窗口上。这里的 GdkWindow窗口和Gtk+里的GtkWindow窗口是不一样的。 GdkWindow不是一个用户可见的对象,而是一个X服务器用于划分屏幕的抽象概念。一个GdkWindow窗口,对X服务器给出了关于将要显示的图形的结构信息。因为X窗口系统是网络透明的,有可能X窗口的显示位置和X服务器不在同一台机器上,这样有助于减少网络流量。GtkWindow是
一个窗口构件,它是一个用户可见的对象。

还有一些构件,比如说GtkLabel构件,没有与之相关联的GdkWindow;它们被称为“无窗口构件”,并且是相对轻量级的。没有相关联窗口的构件绘制在它的父构件的GdkWindow窗口上。一些操作,例如捕获一个事件,要求有一个GdkWindow窗口,因此不能在无窗口构件上做这些操作。

构件要经过一系列与它们的GdkWindow相关的状态:

如果一个构件相应的GdkWindow被创建出来,称为该构件被显现(realize)。用
gtk_widget_realize()函数显现一个构件,用gtk_widget_unrealize()函数反显现(unrealized)构件。因为X窗口必须有一个父窗口,如果一个构件已经显现,它的父窗口也必然已显现。

如果在构件的GdkWindow上调用了gdk_window_show()函数,称为该构件被映射(map)了。这意味着服务器已经要求在屏幕上显示这个构件的GdkWindow窗口。很明显,GdkWindow窗口必须存在,也就是说,被映射的构件必然已被显现。

如果当一个构件的父构件被映射时,它也被映射到屏幕上,这个构件就是可见的。这意味着已经对该构件调用了gtk_widget_show()函数。通过调用gtk_widget_hide()函数,一个构件可以绘制为不可见的,这或者是取消未决的映射(已经确定了映射的时间,但还未映射),或者反映射该构件(隐藏它的GdkWindow窗口)。因为顶级构件没有父构件,当它们一显示,它们同时就被映射了。

在典型的用户代码中,只需调用gtk_widget_show()函数。这暗含当它的父构件一旦被显现和映射,该构件就被显现和映射。要理解的是: gtk_widget_show()函数并不会立即生效,这一点很重要,它仅仅是确定构件被显示出来的时间。也就是说,不用担心显示构件的顺序(不必一定要先显示子构件,再显示父构件)。但是,这时还不能立即访问这个构件的GdkWindow窗口。有时,又确实需要在映射之前访问构件的GdkWindow 窗口;在这样的情况下,要手工调用gtk_widget_realize()函数来创建这个GdkWindow。如果机会适当, gtk_widget_realize()函数还会显现构件的父构件。使用gtk_widget_realize()函数的情况是不多见的,如果感觉到一定要这么做时,也许是使用了不正确的方法。

上面介绍了创建构件的过程。销毁构件自动地将以上事件的整个次序倒过来,递归取消子构件和构件本身的显现。

正如上面所提到的,对构件调用gtk_widget_show()函数之后,构件并不一定会显示。只有当构件的所有父构件(直到最高级别的父构件)全部显示之后,它才会显示。因而,一般情况下,应该最后对最高级别的构件GtkWindow调用gtk_widget_show()函数。否则,如果先显示高级别的构件,用户可能会看到窗口先出现在屏幕上,然后子构件一个一个显示在屏幕上。用户或许会觉得你的程序不够专业,甚至不正确。

下面是显现、映射和显示构件的相关函数。

函数列表:显示/映射/显现构件

#include<gtk/gtkwidget.h>
/*显现一个构件,创建该构件的GdkWindow*/
voidgtk_widget_realize(GtkWidget*widget)

/*反显现构件,销毁该构件的GdkWindow*/
voidgtk_widget_unrealize(GtkWidget*widget)

/*映射构件,构件的GdkWindow显示在窗口上*/
voidgtk_widget_map(GtkWidget*widget)

/*反映射构件,隐藏构件的GdkWindow。注意,构件的GdkWindow还存在*/
voidgtk_widget_unmap(GtkWidget*widget)

/*显示构件,当构件的父构件(向上递归直到最高级别构件)显示时,
*构件将显示在屏幕上,*/
voidgtk_widget_show(GtkWidget*widget)

/*隐藏构件,构件的GdkWindow依然存在*/
voidgtk_widget_hide(GtkWidget*widget)

基于gst,gtk等库开发的摄像头视频采集程序 基于gstream,gtk等库开发的摄像头视频采集程序,用gtk做界面 立即下载

相关推荐

linux 操作系统 GTK /proc文件 系统监视器

linux下读取/proc获得系统信息 监控系统状态,显示系统中若干部件的使用情况。 用GTK库实现图形界面显示系统监控状态

(转)GTK+ Widget的内部结构与工作流程

<br />GtkWidget的基本结构是这样的:typedefstruct{<br />   GtkStyle *GSEAL ( style) ;<br />   GtkRequisition GSEAL ( requisition) ;<br />   GtkAllocation GSEAL ( allocation) ;<br />   GdkWindow *GSEAL ( window) ;<br />   GtkWidget *GSEAL ( parent) ;<br

lcw_202的专栏 859

GtkDatabox:GTK + -3小部件以显示数据-开源

GtkDatabox是一个小部件,用于实时显示大量波动的数字数据。 数据表示(例如,以线性或对数刻度,以点或线,带有标记/标签)以及用户交互(例如,测量距离)都很容易。

GtkWindow — Toplevel which can contain other widgets

GtkWindow — Toplevel which can contain other widgets

突围 2083

君正T31x metartc集成测试

metartc为国内杨大侠部分开源的一款用于嵌入式领域webrtc库,它与谷歌官方webrtc相比,编译到君正平台的可执行文件仅有5M即可实现webrtc的通信。1. 目前实现的是基于开源版v5.0-b0版本做的简单修改,官方的好几个版本都多少缺点东西,我这里给整理了一下。目前是局域网连接的webrtc,后续尝试走stun和turn试一下NAT穿越的效果。

fsmpeg的博客 3155

数据中心——Vxlan基本概念1

东西流量指的就是横向流量-------例如:服务器与服务器之间交换流量南北流量指的就是纵向流量-------例如:客户端和服务器之间的流量以下主要是讲解业务平面的网络架构(一般业务平面就需要用到专用的数据中心交换机)

m0_49864110的博客 1万+

GAN(生成对抗网络)的系统全面介绍(醍醐灌顶)

本文是关于GAN学习的较为系统全面的介绍,主要针对初学者,希望能够对大家带来帮助。

m0_61878383的博客 21万+

避坑指南:Livox Mid-360双雷达SLAM配置中,那些官方文档没说的细节(IP设置、话题分离与时间同步)

本文详细解析了Livox Mid-360双雷达SLAM配置中的关键优化点,包括IP设置、话题分离与时间同步等官方文档未提及的细节。通过实战案例和代码示例,帮助开发者解决点云错位、IMU数据混乱等问题,提升SLAM系统的稳定性和精度。特别针对网络架构设计、驱动修改和时间同步机制提供了专业指导。

weixin_29745609的博客 425

软件设计师 - 错题笔记

2018 年 5 月 上午题 1. 浮点数 浮点数对接时,先对阶,将小阶向大阶对齐,同时尾数右移 n 位(n 为阶差的绝对值)。 2. 流水线吞吐率 1/△t 单位时间流水线处理的任务数。流水线吞吐率是指令执行周期的倒数。指令执行周期是最长流水段的操作时间。 3. SSH SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 ...

weixin_34310785的博客 40万+

域控制器迁移后NETLOGON共享丢失的修复指南

本文详细解析了在Windows域控制器迁移后NETLOGON共享丢失的故障现象与修复方法。通过使用Dcdiag工具诊断,定位注册表键值SysVolReady异常及SCRIPTS目录缺失等核心原因,并提供了修改注册表、创建目录、重启Netlogon服务等逐步修复指南,帮助管理员快速恢复域用户登录功能,确保业务连续性。

weixin_29245767的博客 88

人大金仓的‘影子表’sys_user:搞懂Schema优先级,告别字段不存在的报错

本文深入解析人大金仓数据库中‘影子表’sys_user的Schema优先级问题,帮助开发者解决字段不存在的报错。通过分析Schema搜索路径机制,提供四种解决方案,包括连接时指定Schema、动态调整搜索路径、永久修改用户设置和使用完全限定表名,确保查询准确无误。

weixin_30329623的博客 594

GTK+构件

从GtkWidget中继承的类称为构件,构件分为“有窗口构件”和“无窗口构件”两种。有窗口构件有一个与之相关联的GdkWindow,而无窗口构件没有,它们将被绘制在有窗口构件的窗口上。在构件中,只有窗口构件才能接收和处理事件。如果要处理无窗口构件所产生的事件,则必须将它们放到GtkEventBox中,通过从GtkEventBox中接收事件来实现。

若有所思HS 841

LVGL hal indev(porting evdev)

LVGL中对输入设备的管理是单例实现的,而在Linux的输入设备是多个的,所以需要对其进行改造成多例实现。

Bigan(安)的博客 3344

GTK渲染摄像头图像数据

绘图工具集(GDK,Graphics Drawing Kit)是在GTK+ 和特定操作系统的应用编程接口(API,Application Program Interface)之间的低级绘图制层—— Linux的API是Xlib。由于GTK和机器的API之间没有直接接口,移植GTK+就成为移植GLIB和GDK的问题。GDK提供像元的绘制能力以及低层的窗口建立和处理能力。对许多应用来说,使用构件时最方便的,但是,如果你想用GTK+编写模拟时钟的应用程序,由于它没有绘制时钟表面的能力,实现这样的任务就有困难了。

weixin_44453694的博客 1415

【四足机器人项目实战】MIT无刷电机FOC硬件电路设计

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、MCU最小系统--STM32F446RE1.usb串口通讯连接口+程序下载连接口2.MCU电源滤波二、磁编码器角度传感器三、三相驱动桥四、CAN通讯收发器电路五、温度ADC检测六、电源滤波及分压电路1、DC电源输入端2、DC电源滤波电路3、DC电源分压电路4、三相绕线接线端总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对

qq_35635374的博客 7061

从原理到落地:监控 SAP OData bgRFC 队列的全景实践指南

摘要(150字) 本文系统讲解SAP Gateway/Backend场景中bgRFC队列的监控方法。内容涵盖:1)监控必要性——确保异步可靠传输,及时识别失败消息;2)两种服务质量(EO/EOIO)对监控策略的影响;3)通过事务码SBGRFCMON和SPRO路径访问监控界面;4)关键授权S_BGRFC的配置要求;5)详细操作指南包括筛选条件和动作选项;6)标准巡检脚本;7)三个典型案例(认证错误、顺序阻塞、调度压力)的诊断与修复方案。全文提供完整的监控方法论和实战指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 284

spice-gtk源码分析(六):SpiceDisplay GTK渲染控件

渲染后端:支持Cairo软件渲染和EGL硬件加速两种后端输入处理:将GTK输入事件转换为SPICE协议消息键盘映射:支持多平台的键码到扫描码转换抓取机制:实现键盘和鼠标抓取,确保输入发送到Guest缩放变换:支持多种缩放模式和变换多显示器:支持多显示器配置和区域选择桌面集成:剪贴板同步、文件拖放、USB自动重定向Wayland支持:使用Wayland扩展协议实现更好的集成SpiceDisplay的设计充分考虑了不同平台和场景的需求,通过灵活的配置选项和多种渲染后端,实现了高效的远程桌面显示。

@ 1759

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

二十二、Gtk4-ListView

GTK 4添加了新的列表对象GtkListView、GtkGridView和GtkColumnView。这个新特性在Gtk API参考—列表小构件概述中有描述。GTK 4还有其他实现列表的方法。它们是GtkListBox和GtkTreeView,它们是从GTK 3接管的。在Gtk开发博客中有一篇关于Matthias Clasen所写的列表小构件的文章。他描述了为什么开发GtkListView来取代GtkListBox和GtkTreeView。

Creationyang的博客 1987

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

通过python自动化生成GTK的布局代码(仿Qt)

【设计背景】 工作中一个维护型的项目采用opengl+gtk+sdl的方案进行设计实现的,其中GTK负责窗口的设计实现。 使用过Qt的同学都知道QtCreator设计助手(解脱了ui设计的问题),但是GTK没有这么幸运,看了组内历史的代码,随便一个窗口代码都是上千行的,一看源码其中UI的控件创建、控件size设计、控件的位置等就占据了将近1/3,这是多么尴尬的一件事情。 客户来一个窗口,开发...

904

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[GO语言基础] Go语言 GUI编程:GTK2、GTK+3和QT(十五)

[GO语言基础] Go语言 GUI编程:GTK2、GTK+3和QT(十五)

weixin_54707168的博客 2854

新手学习GTK入门教程 第二讲

<br />#include <gtk/gtk.h> /* 导入gtk头文件,包含gtk其中声明了变量、函数以及数据结构等*/ int main( int argc,char *argv[] ) { GtkWidget *window; gtk_init (&argc, &argv); /*该函数设定了默认的视频(visual)和颜色映射模式(color map),接着会调用函数 gdk_init(gint *argc, gchar ***argv)。该函数初始化要使用的库

x____x的专栏 623

x11 gtk qt gnome kde 之间的区别和联系

x11 gtk qt gnome kde 之间的区别和联系 x11 gtk qt gnome kde 之间的区别和联系 x11 gtk qt gnome kde 之间的区别和联系

weixin_55163060的博客 2252

GTK4+OpenGL+FreeTpye2显示文字教程——OpenGL、FreeType2与GTK4结合使用

文章目录OpenGL、FreeType2与GTK4结合使用GTK4与OpenGL结合OpenGL与FreeType2结合 OpenGL、FreeType2与GTK4结合使用 GTK4与OpenGL结合 实现GtkGLArea控件的realize信号响应函数 static void realize (GtkWidget *widget) { const char *vertex_path, *fragment_path; //设置当前GLArea的GdkGLContext为OpenGL的上下文

从善若水的博客 1024

Qt、GTK 和KDE、GNOME的关系

Linux 下的图形库介绍 在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等。   一、Linux 图形领域的基础设施  1.1 X Window  X Window从逻辑上分为三层:X Server、X Client和

技术的学习与积累是个技术活 4626

Qt、GTK 和KDE、GNOME的关系-转

Linux 下的图形库介绍 在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等。   一、Linux 图形领域的基础设施  1.1 X Window  X Window从逻辑上分为三层:X Server、X C

xp5xp6的博客 1079
上一篇: 【转】玩转ptrace(二)
下一篇: 【转】g_object_weak_ref的意义和用途
code09
博客等级 码龄18年 31粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值