本文档概述了OBS Studio的用户界面架构,解释了UI的结构、它如何与核心系统交互以及插件如何扩展它。有关允许插件与UI交互的前端API的信息,请参见前端API。有关生成设置UI控件的属性系统的详细信息,请参见属性系统。
OBS Studio用户界面使用Qt框架构建,提供了一个灵活、可定制的界面来控制应用程序的功能。
来源
前端API充当插件和OBS Studio UI之间的桥梁,允许插件访问UI组件、响应UI事件以及添加自定义UI元素。
前端API提供
主要功能包括
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中广泛用于为源、滤镜、编码器和其他组件创建设置对话框。
属性系统由三个主要组件组成
obs_properties_t):定义属性的结构和属性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():获取用户设置配置来源
插件可以通过多种方式扩展OBS Studio UI
插件可以向工具菜单添加项
插件可以添加自定义停靠窗口
插件可以注册UI事件
插件可以定义带有回调函数的自定义属性,这些回调函数根据用户输入动态更新UI。
来源