Итак, я новичок в использовании FLTK в C++ и изучаю виджеты. Существует класс Fl_Tabs, который создает новую вкладку, используя метку вставленного в нее виджета.
Однако с этой меткой вкладки нельзя взаимодействовать.
Я хочу, чтобы пользователь мог нажать кнопку на вкладке, чтобы закрыть ее, и я хочу, чтобы они могли взаимодействовать с панелью меню, чтобы добавлять новые вкладки...
вот мой текущий код:
#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();
}
Как добавить кнопку закрытия на ярлык вкладки?
@kiner_shah это работает фантастически, написал несколько модификаций после загрузки в тему, как мне нравится ... но да, работает отлично.
Fl_Tabs не предлагает эту функцию. Вы можете обойти это, добавив кнопку закрытия в саму группу. Добавление и удаление отдельных вкладок в Fl_Tabs работает с «добавить» и «удалить», как и в любой другой группе Fl_Group.
Эта функция будет добавлена где-то 23 января, поэтому, если вы посмотрите мастер на GitHub, вы скоро сможете использовать эту функцию.
Высота для tab1, 2 и 3, вероятно, должна быть равна window.h()-64, а не 32.
Как упомянул Матиас Мелчер, это было недавно добавлено в FLTK (Матиасом Мелчером :)). Изменение вашего примера:
#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();
}
Вы можете использовать еженедельный снимок, так как он достаточно актуален. Вы также можете взять исходный код из репозитория fltk на github и собрать/установить в своей системе.