繁体   English   中英

在 FLTK 中创建一个可关闭的选项卡

[英]Create a closable tab in FLTK

所以我是 C++ 中使用 FLTK 的新手,我正在学习小部件。 有一个名为 Fl_Tabs 的 class 创建一个新选项卡,使用插入其中的小部件的 label。

但是,此选项卡 label 无法与之交互。

我希望用户能够单击选项卡上的按钮将其关闭,并且我希望他们能够与菜单栏交互以添加新选项卡...

这是我当前的代码:

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
#include <FL/Enumerations.H>
 
int main(int argc, char **argv) {
  Fl_Window window(Fl::w()/2,Fl::h()/2, "test");

  Fl_Box windowBox(0,32,window.w(),window.h()-32);
  window.resizable(&windowBox);
  Fl_Tabs mainTabs(0,32,window.w(),window.h()-32);
  Fl_Group tab1(0,64,window.w(),window.h()-32, "Tab 1");
  tab1.end();
  Fl_Group tab2(0,64,window.w(),window.h()-32, "Tab 1");
  tab2.end();
  Fl_Group tab3(0,64,window.w(),window.h()-32, "Tab 1");
  tab3.end();
  mainTabs.end();

  window.end();
  window.show(argc, argv);
  return Fl::run();
}

如何向选项卡 label 添加关闭按钮?

Fl_Tabs 不提供该功能。 您可以通过在组本身中添加一个关闭按钮来解决它。 向 Fl_Tabs 添加和删除单个选项卡可以使用“添加”和“删除”,就像任何其他 Fl_Group 一样。

这个功能即将在1月23日的某个时候添加,所以如果你在GitHub上观看大师,你应该很快就可以使用这个功能。

tab1、2 和 3 的高度可能应该是 window.h()-64,而不是 32。

正如 Matthias Melcher 提到的,这是最近添加到 FLTK 中的(作者:Matthias Melcher:))。 修改你的例子:

#include <FL/Fl.H>
#include <FL/Enumerations.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Tabs.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Window.H>

void tab_closed_cb(Fl_Widget *w, void *data) {
    auto parent = w->parent();
    parent->remove(w);
}

int main(int argc, char **argv) {
    Fl_Window window(Fl::w()/2,Fl::h()/2, "test");
    Fl_Box windowBox(0,32,window.w(),window.h()-32);
    window.resizable(&windowBox);
    Fl_Tabs mainTabs(0,32,window.w(),window.h()-32);
    // first tab
    Fl_Group tab1(0,64,window.w(),window.h()-32, "Tab 1");
    tab1.when(FL_WHEN_CLOSED);
    tab1.callback(tab_closed_cb);
    tab1.end();

    // second tab
    Fl_Group tab2(0,64,window.w(),window.h()-32, "Tab 2");
    tab2.when(FL_WHEN_CLOSED);
    tab2.callback(tab_closed_cb);
    tab2.end();

    // third tab
    Fl_Group tab3(0,64,window.w(),window.h()-32, "Tab 3");
    tab3.when(FL_WHEN_CLOSED);
    tab3.callback(tab_closed_cb);
    tab3.end();

    mainTabs.end();
    window.end();
    window.show(argc, argv);
    return Fl::run();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM