FTXUI基础笔记(hello world)

举报
zhangrelay 发表于 2022/07/17 00:12:09 2022/07/17
【摘要】 程序如下,构建单个框架,需要创建一个 ftxui::Element,并将其显示在 ftxui::Screen 上。 #include <ftxui/dom/elements.hpp>#include <ftxui/screen/screen.hpp>#include <iostream> int m...

程序如下,构建单个框架,需要创建一个 ftxui::Element,并将其显示在 ftxui::Screen 上。


  
  1. #include <ftxui/dom/elements.hpp>
  2. #include <ftxui/screen/screen.hpp>
  3. #include <iostream>
  4. int main(void) {
  5. using namespace ftxui;
  6. // Define the document
  7. Element document =
  8. hbox({
  9. text("ros1") | border,
  10. text("bridge") | border | flex,
  11. text("ros2") | border,
  12. });
  13. auto screen = Screen::Create(
  14. Dimension::Full(), // Width
  15. Dimension::Fit(document) // Height
  16. );
  17. Render(screen, document);
  18. screen.Print();
  19. return EXIT_SUCCESS;
  20. }

编译执行后效果如下:

 


模块列表
项目由3个模块组成:

ftxui/screen 定义了一个 ftxui::Screen,一个 ftxui::Pixel 的网格。
ftxui/dom 是主要模块。 它定义了一组分层的 ftxui::Element。 一个元素在 ftxui::Screen 上绘制了一些东西。 它响应容器的大小。
ftxui/component 如果程序需要响应用户输入,则需要该模块。 它定义了一组 ftxui::Component。 这些组件可用于通过使用箭头键和与复选框等小部件进行交互来导航程序。 也可以制作自己的组件。 用户可以使用箭头键进行导航,并与复选框/输入框/...等小部件进行交互。可以创建自己的组件。


按钮程序如下:


  
  1. #include <memory> // for shared_ptr, __shared_ptr_access
  2. #include <string> // for operator+, to_string
  3. #include "ftxui/component/captured_mouse.hpp" // for ftxui
  4. #include "ftxui/component/component.hpp" // for Button, Horizontal, Renderer
  5. #include "ftxui/component/component_base.hpp" // for ComponentBase
  6. #include "ftxui/component/screen_interactive.hpp" // for ScreenInteractive
  7. #include "ftxui/dom/elements.hpp" // for separator, gauge, text, Element, operator|, vbox, border
  8. using namespace ftxui;
  9. int main(int argc, const char* argv[]) {
  10. int value = 0;
  11. // The tree of components. This defines how to navigate using the keyboard.
  12. auto buttons = Container::Horizontal({
  13. Button("Hello ROS2", [&] { value++; }),
  14. });
  15. // Modify the way to render them on screen:
  16. auto component = Renderer(buttons, [&] {
  17. return vbox({
  18. text("click = " + std::to_string(value)),
  19. separator(),
  20. gauge(value * 0.01f),
  21. separator(),
  22. buttons->Render(),
  23. }) |
  24. border;
  25. });
  26. auto screen = ScreenInteractive::FitComponent();
  27. screen.Loop(component);
  28. return 0;
  29. }
  30. // Copyright 2020 Arthur Sonzogni. All rights reserved.
  31. // Use of this source code is governed by the MIT license that can be found in
  32. // the LICENSE file.


 

ftxui::component 模块定义了生成响应用户事件(键盘、鼠标等)的交互式组件的逻辑。

ftxui::ScreenInteractive 定义了一个渲染组件的主循环。

ftxui::Component 是指向 ftxui::ComponentBase 的共享指针。 后者定义:

ftxui::ComponentBase::Render():如何渲染界面。
ftxui::ComponentBase::OnEvent():如何对事件做出反应。
ftxui::ComponentBase::Add():构造两个组件之间的父子关系。 组件树用于定义如何使用键盘进行导航。
ftxui::Element 用于渲染单个帧。

ftxui::Component 用于渲染动态用户界面,生成多个帧,并根据事件更新其状态。


文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/125813812

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。