如何在 FLTK 中远离 Fl_Button?
Posted
技术标签:
【中文标题】如何在 FLTK 中远离 Fl_Button?【英文标题】:How can I tab away from a Fl_Button in FLTK? 【发布时间】:2020-05-05 02:18:29 【问题描述】:我有一个自定义类CustomButton
,它扩展了Fl_Button
。在我的屏幕上有一堆 Fl_Input
和 CustomButton
小部件,我希望能够使用 tab 按键在它们之间导航。在输入字段之间切换可以正常工作,但是一旦 CustomButton
获得焦点,我似乎无法离开它。
这是我的句柄函数
int CustomButton::handle ( int event )
int is_event_handled = 0;
switch (event)
case FL_KEYBOARD:
// If the keypress was enter, toggle the button on/off
if (Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter)
// Do stuff...
is_event_handled = 1;
break;
case FL_FOCUS:
case FL_UNFOCUS:
// The default Fl_Button handling does not allow Focus/Unfocus
// for the button so mark the even as handled to skip the Fl_Button processing
is_event_handled = 1;
break;
default:
is_event_handled = 0;
break;
if ( is_event_handled == 1 ) return 1;
return Fl_Round_Button::handle ( event );
我使用的是 fltk 1.1.10。
【问题讨论】:
【参考方案1】:有关演示如何控制焦点的非常简单的最小示例,请查看navigation.cxx 测试文件。
也许您的小部件确实获得了焦点(使用 Fl::focus() 检查),但它没有显示出来(您需要处理 FL_FOCUS 和/或 FL_UNFOCUS 事件)?
【讨论】:
我注释掉了我的CustomButton::handle()
函数并将事件传递给Fl_Button::handle()
,但我仍然无法离开CustomButton
。我可以看到CustomButton
在我进入它时确实有焦点,但它不会放开。我应该注意我正在使用 fltk 1.1.10
看起来Fl_Group::handle()
从来没有进入按钮的FL_KEYBOARD
大小写,但它确实用于Fl_Input
。该案例调用了navigation(navkey())
,我猜需要调用它才能将焦点从CustomButton
移开【参考方案2】:
我的问题是我的CustomButton::handle()
在FL_KEYBOARD
事件之后返回1
而没有实际使用Tab 键。
将is_event_handled = 1
移动到 if 语句中让我只使用FL_Enter
按键,并让其他小部件(即控制导航的 Fl_Group)使用任何其他按键。
或者去掉 if
并替换为类似的东西
switch(Fl::event_key())
case FL_Enter:
case FL_KP_Enter:
// Do stuff
is_event_handled = 1;
break;
default:
is_event_handled = 0;
break;
【讨论】:
以上是关于如何在 FLTK 中远离 Fl_Button?的主要内容,如果未能解决你的问题,请参考以下文章