Создайте закрывающуюся вкладку в FLTK

Итак, я новичок в использовании 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 это работает фантастически, написал несколько модификаций после загрузки в тему, как мне нравится ... но да, работает отлично.

Cryos 03.01.2023 20:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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.org по-прежнему показывает последнюю версию как 1.3.8. не могли бы вы сказать мне, какой именно выпуск вы используете? Я вижу еженедельный снимок.
Cryos 01.02.2023 15:35

Вы можете использовать еженедельный снимок, так как он достаточно актуален. Вы также можете взять исходный код из репозитория fltk на github и собрать/установить в своей системе.

mo_al_ 01.02.2023 23:31

Другие вопросы по теме