Sorting 如何在FLTK中对小部件进行排序以使箭头键导航正常工作?
FLTK文件说明: 箭头键、tab键和shift+tab键“导航”选择。Left、right、tab或shift+tab移动到层次结构中的下一个或上一个小部件。如果导航似乎不起作用,您可能需要对小部件进行“排序”。如果您有输入字段,这一点很重要,因为FLTK在使用箭头键在输入字段之间移动时使用相同的规则。Sorting 如何在FLTK中对小部件进行排序以使箭头键导航正常工作?,sorting,user-interface,widget,focus,fltk,Sorting,User Interface,Widget,Focus,Fltk,FLTK文件说明: 箭头键、tab键和shift+tab键“导航”选择。Left、right、tab或shift+tab移动到层次结构中的下一个或上一个小部件。如果导航似乎不起作用,您可能需要对小部件进行“排序”。如果您有输入字段,这一点很重要,因为FLTK在使用箭头键在输入字段之间移动时使用相同的规则。 我的项目有以下几个特点: 许多小部件,随意创建和删除,这使得跟踪小部件创建顺序变得困难(默认导航基于此工作) 小部件有不同的类型、输入、输出、按钮等 我已经完成了Fl::option(Fl::
我的项目有以下几个特点:
谢谢。您可以按如下方式进行排序:
void User_Group :: SortWidgets()
{
Fl_Widget *pt[TOTAL_WIDGETS], *temp;
int i, j, TotalNoOfChild = children();
//----------INITIALIZE TO NULL THE CHILD ARRAY *pt[]----------
for (i = 0; i < TOTAL_WIDGETS; i++)
pt[i]= NULL;
//----------COPYING CHILDREN FROM THE GROUP INTO POINTER ARRAY *pt[]----------
for (i = 0; i < TotalNoOfChild; i++)
pt[i]= (child(i));
//----------REMOVING CHILDREN FROM CHILDREN FROM THE GROUP----------
while (children() > 0)
remove(0);
//----------SORTING CHILD ARRAY *pt[] ACCORDING TO CO-ORDINATES----------
for (i = 0; i < TotalNoOfChild + 1; i++)
{
for (j = i + 1; j < TotalNoOfChild; j++)
{
if ((pt[i]->y()) > (pt[j]->y()))
{
temp=pt[i];
pt[i]=pt[j];
pt[j]=temp;
}
}
}
for (i = 0; i < TotalNoOfChild + 1; i++)
{
for (j = i + 1; j < TotalNoOfChild; j++)
{
if (((pt[i]->x())>(pt[j]->x())) && ((pt[i]->y()) >= (pt[j]->y())))
{
temp=pt[i];
pt[i]=pt[j];
pt[j]=temp;
}
}
}
/*
//----------ALTERNATE SORTING----------
for (i = 0; i < TotalNoOfChild + 1; i++)
{
for (j = i+1; j < TotalNoOfChild; j++)
{
if (((pt[i]->y())*1000+(pt[i]->x()))>((pt[j]->y())*1000+(pt[j]->x())))
{
temp=pt[i];
pt[i]=pt[j];
pt[j]=temp;
}
}
}
*/
//----------RE-ADDING CHILDREN INTO THE GROUP----------
for (i = 0; i < TotalNoOfChild; i++)
add(pt[i]);
void User_Group::sortwidges()
{
Fl_Widget*pt[总WIDGETS],*temp;
int i,j,TotalNoOfChild=children();
//----------初始化为空子数组*pt[]----------
对于(i=0;i0)
移除(0);
//----------根据坐标对子数组*pt[]进行排序----------
对于(i=0;iy())>(pt[j]>y())
{
温度=pt[i];
pt[i]=pt[j];
pt[j]=温度;
}
}
}
对于(i=0;ix())>(pt[j]->x())&((pt[i]->y())>=(pt[j]->y()))
{
温度=pt[i];
pt[i]=pt[j];
pt[j]=温度;
}
}
}
/*
//----------交替分拣----------
对于(i=0;iy())*1000+(pt[i]->x())>((pt[j]->y())*1000+(pt[j]->x()))
{
温度=pt[i];
pt[i]=pt[j];
pt[j]=温度;
}
}
}
*/
//----------将孩子重新添加到组中----------
对于(i=0;i
}通过排序,他们可能意味着(重新)在组中按特定顺序创建小部件。