GTK+图形化应用程序开发学习笔记(五)—组装盒、组合表、固定容器构件(1)

本文详细介绍了GTK+中的组装盒组件,包括横向和纵向组装盒的创建与使用方法。通过实例演示了如何利用这些组件组织GUI布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、组装盒

       组装盒(GtkBox)也称为组合构件。使用组装盒可以将多个构件放在一个容器中。容器可以把组装盒看作是一个构件。不像按钮构件,组装盒在屏幕上时看不见的。事实上,它们是同时跟踪若干子构件的不可见容器。组装盒分为纵向组装盒和横向组装盒。纵向组装盒在垂直方向堆积构件,横向组装盒沿水平方向堆积构件。

       使用gtk_vbox_new函数建立纵向组装盒,使用gtk_hbox_new函数建立横向组装盒。在建立组装盒以后,可以使用gtk_box_pack_start函数或gtk_box_pack_end函数将构件放到组装盒中。

为了显示构件,必须将构件放入组装盒中,并将组装盒放在容器内。这等效于使容器具有容纳多个构件的能力。虽然组装盒没有任何可视的部分,但是必须使容器和组装盒成为可视。因为可视性影响加到容器内的构件。

      

2

名称:

gtk_hbox_new

gtk_vbox_new

功能

创建一个横向组装盒 gtk_hbox_new

创建一个纵向组装盒 gtk_vbox_new

头文件

#include <gtk/gtk.h>

函数原形

GtkWidget *gtk_hbox_new(gboolean homogeneous,gint spacing);

GtkWidget *gtk_vbox_new(gboolean homogeneous,gint spacing);

参数

homogeneous  子构件是否具有同样的大小

spacing       子构件间的距离

返回值

新的组装盒

      

 

 

 

 

 

 

 

 

 

 

 

 

建立组装盒的函数取两个参数,用来确定组装盒在屏幕上的外观。

第一个参数称为homogeneous.用这一参数来确定所有增加的构件具有同样的大小。例如,在一个横向组装盒中建立5个按钮,分别带有标号:fredjoesuekarenBartholomew the Great。如果homogeneous参数为FALSE,组装盒建立5个不同大小的按钮,正好在按钮上容纳各自的标号的正文。如果homogeneous参数为TRUE,组装盒计算最大的构件大小,然后按照最大的构件的大小对所有按钮分配同样大小的空间。

       第二个参数称为spacing。用它来确定插入组装盒的构件之间的空间。将spacing参数设置为0表示在插入的构件之间不留空间。

 

3

名称:

gtk_box_pack_start

gtk_box_pack_end

功能

将构件放到组装盒中

头文件

#include <gtk/gtk.h>

函数原形

void gtk_box_pack_start(GtkBox *box,GtkWidget *child,gboolean expend,gboolean fill,guint padding);

void gtk_box_pack_end(GtkBox *box,GtkWidget *child,gboolean expend,gboolean fill,guint padding);

参数

box          组装盒的名称

child         子构件的名称

expend       构件周围是否还有可扩充的空间

fill          构件是否需要充分利用构件周围空间

padding      构件周围要保留多少个填充的像元

返回值

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

函数gtk_box_pack_start将构件放在顶部(对于纵向组装盒)或左边(对于横向组装盒。函数gtk_box_pack_end将构件放在底部(对于纵向组装盒)或右边(对于横向组装盒)。

       gtk_box_paxk_startgtk_box_pack_end5个参数,其中3个参数用来确定如何将构件放在组装盒内。

expand参数表示在所有构件加入组装盒以后,构件周围是否还有可扩充的空间。如果用homogenous格式建立组装盒,则忽略这一参数。因为homegeneous参数表示构件在组装盒内使用同样大小的空间。

fill参数表示构件是否需要充分利用构件周围空间。将此参数设置为TRUE允许构件稍稍扩大一点,以充分利用组装盒分配给它的空间。将此参数设置为FALSE强制构件只使用它需要的空间。多余的空间围绕构件的周围分布。

padding参数表示在构件周围要保留多少个填充的像元。多数情况下将它的值设置为0

  1. #include <gtk/gtk.h>
  2. void PackNewButton(Gtk Widget *box,char *szLabel);
  3. int main(int argc,char *argv[ ])
  4. {
  5. GtkWidget *window; /*定义窗体*/
  6. GtkWidget *box;    /*定义组装盒*/
  7. gtk_init(&argc,&argv); /*初始化GTK+库*/
  8. window=gtk_window_new(GTK_WINDOW_TOPLEVEL); /*创建窗体*/
  9. gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL); /*登记destroy信号,调用退出函数*/
  10. box=gtk_vbox_new(FALSE,0); /*创建组装盒*/
  11. PackNewButton(box,”Button1”); /*调用创建按钮函数*/
  12. PackNewButton(box,”Button2”); 
  13. PackNewButton(box,”Button3”); 
  14. PackNewButton(box,”Button4”); 
  15. PackNewButton(box,”Button5”); 
  16. gtk_container_add(GTK_CONTAINER(window),box); /*把组装盒放入窗体*/
  17. gtk_widget_show(box); /*使组装盒可视*/
  18. gtk_widget_show(window); /*使窗体可视*/
  19. gtk_main(); /*等待用户操作*/
  20. }
  21. void PackNewButton(GtkWidget *box,char *szLabel)
  22. {
  23. GtkWidget *button;/*定义按钮*/
  24. button=gtk_button_new_with_label(szLabel); /*创建带标号的按钮*/
  25. gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0); /*把按钮加入组装盒*/
  26. gtk_widget_show(button); /*使按钮可视*/
  27. }

 

下面我们来编译它:

$gcc –o box box.c `pkg-config –cflags –libs gtk+-2.0`

$./box

程序运行后会出现下面的图形:

 

本例涉及到了按钮的创建,大家暂时不必关注,我会在下面的章节介绍。

内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值