Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在GTK+;中找到给定方向上的下一个小部件;?_Gtk_Direction - Fatal编程技术网

如何在GTK+;中找到给定方向上的下一个小部件;?

如何在GTK+;中找到给定方向上的下一个小部件;?,gtk,direction,Gtk,Direction,我想找出哪个小部件在GTK+中处于给定的方向,即执行“移动焦点”信号所做的操作,但实际上不改变焦点。我想到的是一个函数,它接受GtkWidget*和GtkDirectionType,并返回给定方向上的GtkWidget(如果有) 我希望这样做的目的是最终在我的UI定义中以从左到右的顺序枚举特定GtkFrame中的小部件。也就是说,基本上在我的GtkFrame内(或者在一般情况下,在任何容器内)从最左边到最右边创建一个小部件列表 我试图搜索GTK文档,但没有找到任何不会改变焦点的内容。假设您关心的

我想找出哪个小部件在GTK+中处于给定的方向,即执行“移动焦点”信号所做的操作,但实际上不改变焦点。我想到的是一个函数,它接受GtkWidget*和GtkDirectionType,并返回给定方向上的GtkWidget(如果有)

我希望这样做的目的是最终在我的UI定义中以从左到右的顺序枚举特定GtkFrame中的小部件。也就是说,基本上在我的GtkFrame内(或者在一般情况下,在任何容器内)从最左边到最右边创建一个小部件列表


我试图搜索GTK文档,但没有找到任何不会改变焦点的内容。

假设您关心的方向是“向前”和“向后”,听起来你想在框架上使用它:它与tin上所说的几乎一样:在标签切换时,你会得到一个按焦点顺序排列的小部件列表。

如果没有其他方法,我接下来要做的是从GtkContainer的库实现中复制一组选定的静态函数,并将它们放在我自己的应用程序中的一个文件中,修改它们以满足我的需要


更具体地说,函数gtk_container_focus_sort_left_right()和它所依赖的任何局部函数。这包括GCompareFunc left_right_compare()和get_allocation_coords()。

实际上,我要找的不是选项卡顺序,而是通过向上/下/左/右发送GTK_DIR_作为“移动焦点”信号的参数来访问的小部件。(“移动信号”也可以使GTK_DIR_TAB_向前/向后移动,从而按制表符顺序移动焦点)。此外,GTK_container_get_focus_chain()仅在显式设置时返回焦点链(我假设使用GTK_container_set_focus_chain(),尽管我没有尝试过)。它似乎没有返回由GTK+自动计算的默认焦点链。最后一个假设是错误的:如果未设置焦点链,则应计算焦点链。调用GTK_容器_get_focus_chain()而不调用GTK_容器_set_focus_chain()返回false,而且GList**focusable_widgets参数至少在我手头的实现中设置为NULL。我怀疑,在实际移动焦点时,会以某种方式使用焦点链,但至少gtk_container_get_focus_chain()无法访问它。