菜单

用户界面

相关源文件

本文档概述了OBS Studio的用户界面架构,解释了UI的结构、它如何与核心系统交互以及插件如何扩展它。有关允许插件与UI交互的前端API的信息,请参见前端API。有关生成设置UI控件的属性系统的详细信息,请参见属性系统

架构概述

OBS Studio用户界面使用Qt框架构建,提供了一个灵活、可定制的界面来控制应用程序的功能。

来源

前端 API

前端API充当插件和OBS Studio UI之间的桥梁,允许插件访问UI组件、响应UI事件以及添加自定义UI元素。

前端API提供

  1. 事件系统:允许插件注册UI事件(如流媒体开始/停止、场景切换等)的回调函数。
  2. UI访问函数:用于访问和操作UI元素的函数(获取/设置当前场景、访问配置文件等)。
  3. UI扩展函数:用于添加自定义UI元素的函数(如工具菜单项、停靠窗口等)。

主要功能包括

  • obs_frontend_add_event_callback() - 注册UI事件
  • obs_frontend_add_tools_menu_item() - 添加自定义工具菜单项
  • obs_frontend_add_dock_by_id() - 添加自定义停靠窗口
  • obs_frontend_get_main_window() - 获取主窗口句柄
  • obs_frontend_get_current_scene() - 获取当前场景

来源

属性系统

属性系统提供了一个框架,用于根据属性定义动态生成UI控件。它在OBS Studio中广泛用于为源、滤镜、编码器和其他组件创建设置对话框。

属性系统由三个主要组件组成

  1. 属性定义 (obs_properties_t):定义属性的结构和属性
  2. UI控件:基于属性定义创建的Qt控件
  3. 数据存储 (obs_data_t):存储实际的属性值

属性可以是多种类型

  • 布尔型(复选框)
  • 整型(微调框或滑块)
  • 浮点型(微调框或滑块)
  • 文本型(文本输入)
  • 路径型(文件/目录选择器)
  • 列表型(组合框)
  • 颜色型(颜色选择器)
  • 按钮型(按钮)
  • 组型(其他属性的容器)

每个属性都可以有回调函数,当属性值改变时触发,从而允许根据用户输入动态更新UI。

来源

停靠系统

OBS Studio使用Qt的停靠系统来提供灵活的UI布局。主窗口包含一个中心小部件(预览),以及多个可以排列、调整大小甚至分离为独立窗口的停靠小部件。

停靠系统允许

  • 移动和调整停靠窗口的大小
  • 在不同位置停靠窗口
  • 将多个停靠窗口组合为标签页
  • 将停靠窗口分离为独立窗口

插件可以使用前端API函数添加自定义停靠窗口

  • obs_frontend_add_dock_by_id():在停靠窗口菜单中添加一个带切换开关的停靠窗口
  • obs_frontend_add_custom_qdock():添加一个没有切换开关的自定义停靠窗口
  • obs_frontend_remove_dock():从UI中移除一个停靠窗口

来源

属性对话框

属性对话框是一个关键的UI组件,用于显示源、滤镜、输出和其他组件的设置。它根据属性定义动态生成UI控件。

当属性值改变时,它可能会触发一个修改回调,该回调可能会修改属性定义,从而导致UI动态更新。这允许创建复杂、上下文敏感的设置对话框。

来源

事件系统

事件系统允许插件响应各种UI事件,例如流媒体开始/停止、场景切换或配置文件切换。

插件可以使用以下方式注册特定事件的回调函数

每当注册的事件发生时,就会调用回调函数,从而允许插件做出适当的响应。

来源

数据管理

UI管理着几种类型的持久数据

场景集合

场景集合存储完整的场景和源集。UI提供了创建、切换和管理场景集合的功能。

关键前端API函数

  • obs_frontend_get_scene_collections():获取场景集合列表
  • obs_frontend_get_current_scene_collection():获取当前场景集合
  • obs_frontend_set_current_scene_collection():设置当前场景集合
  • obs_frontend_add_scene_collection():添加新的场景集合

配置文件

配置文件存储应用程序设置。UI提供了创建、切换和管理配置文件的功能。

关键前端API函数

  • obs_frontend_get_profiles():获取配置文件列表
  • obs_frontend_get_current_profile():获取当前配置文件
  • obs_frontend_set_current_profile():设置当前配置文件
  • obs_frontend_create_profile():创建新配置文件
  • obs_frontend_duplicate_profile():复制配置文件
  • obs_frontend_delete_profile():删除配置文件

配置文件

OBS Studio使用配置文件来存储设置。UI提供了对这些配置文件的访问。

关键前端API函数

  • obs_frontend_get_profile_config():获取配置文件配置
  • obs_frontend_get_app_config():获取系统范围的设置配置
  • obs_frontend_get_user_config():获取用户设置配置

来源

插件UI扩展

插件可以通过多种方式扩展OBS Studio UI

工具菜单项

插件可以向工具菜单添加项

自定义停靠窗口

插件可以添加自定义停靠窗口

事件处理器 (Event Handlers)

插件可以注册UI事件

自定义属性控件

插件可以定义带有回调函数的自定义属性,这些回调函数根据用户输入动态更新UI。

来源