当前位置: 首页 > news >正文

Open3D C++系列教程 (七)继承窗口类

Open3D C++系列教程 (七)继承窗口类

前置:
Open3D C++系列教程 (一)环境搭建
Open3D C++系列教程 (二)第一个GUI窗口
Open3D C++系列教程 (三)关于程序异常退出的探讨
Open3D C++系列教程 (四)动画 Tick事件
Open3D C++系列教程 (五)创建菜单栏
Open3D C++系列教程 (六)菜单栏-文件拾取


在之前的几节中介绍了直接在main中使用gui::Windowgui::SceneWidget创建窗口,这在一些简单的应用中是足够的。但如果需要自定义布局,或者添加键盘、鼠标的一些功能,上面的方法就无法做到。

因此接下来会慢慢介绍继承Window、继承SceneWidget等内容,从而能够创建更为复杂的窗口应用。

本节将会重新组织项目代码,并以继承Window的方式重现之前的窗口及功能,以方便之后的讨论。

文章目录

  • Open3D C++系列教程 (七)继承窗口类
    • 1. 项目结构及CMakeLists
    • 2. 辅助函数
    • 3. 继承窗口类
    • 4. Application类
    • 5. main()函数
    • 6. 运行结果
    • 7. 完整代码下载

1. 项目结构及CMakeLists

在这里我们将与窗口相关的代码放在window.hwindow.cpp中,将辅助函数放在utility.hutility.cpp中,组成下面的项目结构:

exp07
 ├── CMakeLists.txt
 ├── main.cpp
 ├── utility.cpp
 ├── utility.h
 ├── window.cpp
 └── window.h

调整CMakeLists.txt文件,将新增的.h.cpp添加到项目中:

// CMakeLists.txt
...
add_executable(main main.cpp window.h window.cpp utility.h utility.cpp)
...

2. 辅助函数

将辅助函数全部放到utility.hutility.cpp中。

// utility.h

// 获取rgb颜色
Eigen::Vector3d rgb(int r, int g, int b);
Eigen::Vector3d RandomColor();

// 获取程序运行目录
std::filesystem::path GetProgramDirPath();

3. 继承窗口类

首先我们继承一个窗口,并在窗口中添加一个场景控件(gui::SceneWidget):

// window.h
class MyWindow : public gui::Window
{
   
public:
    std::shared_ptr<gui::SceneWidget> main_scene_;

public:
    explicit MyWindow(const std::string &title, int width, int height);

    // Layout
    void Layout(const gui::LayoutContext &context
http://www.dtcms.com/a/16443.html

相关文章:

  • 什么是 大语言模型中Kernel优化
  • 【第5章:深度生成模型— 5.1 变分自编码器(VAE)与生成对抗网络(GAN)的基础理论】
  • 【做一个微信小程序】校园地图页面实现
  • 代码随想录DAY31|56. 合并区间、738.单调递增的数字、968.监控二叉树
  • springboot020基于Java的免税商品优选购物商城
  • Sam Altman 揭秘 OpenAI 未来蓝图:GPT-4.5、GPT-5 与模型规范重大更新
  • 鸿蒙app开发中 tab 切换的时候 里面的子组件如何在页面出现的时候 就请求数据
  • 2025年2月14日笔记 3
  • git如何下载指定版本
  • 二、交换机的vlan子设备接入
  • C语言进阶习题(4结构体)【1】通讯录的实现
  • 洛谷 acwing刷题 有关图的存储形式和djstra算法的例题
  • IDEA常用快捷键
  • 微信小程序的制作
  • 细读 React | React Router 路由切换原理
  • 深度卷积神经网络实战海洋动物图像识别
  • 数据科学之数据管理|python for Excel
  • React 什么时候会触发重新渲染?
  • 工业相机选型五要素
  • Java 大视界 -- 大数据伦理与法律:Java 技术在合规中的作用与挑战(87)
  • 前端框架React知识回顾
  • 一次使用十六进制溢出绕过 WAF实现XSS的经历
  • 【鸿蒙开发】第三十四章 DevEco Studio - 故障分析汇总
  • 三格电子——TCP转ProfibusDP网关使用场景
  • 【GO】Golang/C++混合编程 - 初识
  • 机器视觉--Halcon变量的创建与赋值
  • STM32 ADC介绍(硬件原理篇)
  • img标签的title和alt
  • EasyRTC轻量级SDK:智能硬件音视频通信资源的高效利用方案
  • 正成为现代城市发展的必然趋势的智慧交通开源了