User interface 在Gtk+中堆叠小部件;

User interface 在Gtk+中堆叠小部件;,user-interface,gtk,gtkmm,User Interface,Gtk,Gtkmm,Gtk+中有没有一种方法可以将一个小部件堆叠在另一个小部件之上——不包括GtkFixed?GtkFixed无法正常工作有两个原因:1)我需要Z顺序,2)我需要一个小部件来扩展和填充提供的空间。我认为标准GTK中没有合适的容器。我将子类Gtk::Fixed。。。它仍然是最接近的一个,如果您使用gtkmm,那么子类化应该不会很困难。然后,您可以控制所有小部件的尺寸,拉伸一个选定的子部件以填充空间 要控制Z轴,您可能需要操纵小部件的X窗口——查看GDK windows²主题的GDK文档。我记得在PyG

Gtk+中有没有一种方法可以将一个小部件堆叠在另一个小部件之上——不包括GtkFixed?GtkFixed无法正常工作有两个原因:1)我需要Z顺序,2)我需要一个小部件来扩展和填充提供的空间。

我认为标准GTK中没有合适的容器。我将子类Gtk::Fixed。。。它仍然是最接近的一个,如果您使用gtkmm,那么子类化应该不会很困难。然后,您可以控制所有小部件的尺寸,拉伸一个选定的子部件以填充空间

要控制Z轴,您可能需要操纵小部件的X窗口——查看GDK windows²主题的GDK文档。我记得在PyGTK中,每个小部件都有gtk.widget.window属性,我想gtkmm也是如此。这假设您的所有子窗口小部件都有X个窗口,因此f.e.您需要在Gtk::EventBox中包装Gtk::Label


²

我使用Gtk::Fixed解决了这个问题(实际上是Gtk.Fixed--pygtk--但我认为它在下面是一样的),通过操纵每个小部件的窗口,我能够非常轻松地处理它

在我的例子中,这些小部件已经是EventBox实例了,我只需要确保我正在拖动的那个小部件在上面,否则它就会滑到其他小部件下面,这看起来非常错误。解决方案非常简单,只要在单击小部件开始拖动时,调用“widget.window.raise_389;()”来提升小部件的底层窗口

所以我基本上只是重申前面的答案是有效的,但我想指出这其实很简单。听起来你可能需要创建一些事件框来保存你的小部件,但在那之后它就可以工作了


您可以看到我在

上编写的代码,我能够做到这一点-

在整个空间中显示一个小部件,然后在固定位置的顶部显示另一个小部件,两者同时可见

在gtk2中,通过使用GtkFixed,制定合适的插入顺序(第一次插入-底部,最后插入-顶部),最重要的是--强制GtkFixed拥有自己的窗口:

`f := gtk_fixed_new();
gtk_widget_set_has_window(f, 1);`

如果不设置“有”窗口(f,1),所有子窗口都将插入到某个父窗口/窗口中(请参见gtkfixed.c中的gtk_fixed_realize()),这可能会造成z顺序混乱。

您只想一次在给定的位置显示一个小部件,填充空间,或者更复杂的东西?我想显示一个小部件填充整个空间,然后另一个在固定位置的顶部,两者同时可见。现在,是的,确实有一个小部件可以控制Z顺序和对齐:。谢谢。我希望这将由Gtk+提供。谢谢!我来看看这个。