如何将GtkWidgets发送到后面或前面?

问题描述 投票:1回答:1

我想知道是否有办法动态地“发送回”或“带到前面”GtkWidget。 (我知道,可以通过更改GtkWidget的创建顺序来完成)

示例:(GTK + 2.0,Cent OS 7.0,C)

#include <gtk/gtk.h>
int main( int argc, char *argv[] )    
{
GtkWidget *window, *button1, *button2, *fixed;

gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
button1 = gtk_button_new_with_label("A button");
button2 = gtk_button_new_with_label("B button");

fixed = gtk_fixed_new();

gtk_fixed_put( (GtkFixed*)fixed,button2, 30, 30 );
gtk_fixed_put( (GtkFixed*)fixed,button1, 50, 50 );
gtk_container_add(GTK_CONTAINER(window), fixed);

gtk_widget_show_all (window);
gtk_main ();
return 0;
} 

this program will display : (the first picture)

A Button is over B Button是否有一些命令可以使“B按钮”位于“A按钮”的前面。 (看起来像下面的图片 - >第二张图片)

B Button is over A Button

c layout gtk
1个回答
1
投票

不,没有像GtkFixed那样的“功能”。

来自Gtk 2 documentation

描述

GtkFixed小部件是一个容器,可以将子小部件放置在固定位置并具有固定大小(以像素为单位)。 GtkFixed不执行自动布局管理。

对于大多数应用程序,您不应该使用此容器!它使您不必了解其他GTK +容器,但它会导致应用程序损坏。使用GtkFixed,以下内容将导致截断文本,重叠小部件和其他显示错误:

  • 主题,可能会更改小部件大小。
  • 除了用于编写应用程序的字体之外的字体当然会改变包含文本的小部件的大小;请记住,由于难以读取默认值,用户可能会使用较大的字体,或者他们可能正在使用Windows或GTK +的帧缓冲端口,其中可以使用不同的字体。
  • 将文本翻译成其他语言会改变其大小。此外,在许多情况下,非英语文本的显示将使用不同的字体。

此外,固定小部件无法以从右到左的语言(如希伯来语和阿拉伯语)正确镜像。即通常GTK +将翻转界面以将标签放在他们标记的东西的右侧,但是GtkFixed无法做到这一点。因此,您的应用程序将无法以从右向左的语言使用。

最后,固定定位会使添加/删除GUI元素变得烦人,因为您必须重新定位所有其他元素。这是您的应用程序的长期维护问题。

如果你知道这些东西都不是你的应用程序的问题,并且更喜欢GtkFixed的简单性,那么一定要使用widget。但你应该知道这些权衡。

添加它们的顺序是它们将保留在虚拟Z轴中的顺序。您可以通过删除和读取它们或其他类似方法来控制它。

© www.soinside.com 2019 - 2024. All rights reserved.