Widget
概述
Chromium
中UI
框架的一个核心类,它用于管理和控制应用程序窗口、对话框或其他类型的用户界面元素Widget
提供了窗口的创建、布局、绘制、事件处理等功能,是UI
系统中不可或缺的组件
角色
Widget
是一个基础类,用于创建和管理窗口或控件- 它可以代表一个完整的窗口(如浏览器窗口、弹出窗口),也可以用于嵌入式控件(如按钮、文本框)
Widget
是View
的容器,它管理View
的布局、绘制和事件处理- 一个
Widget
可以包含多个View
,并负责它们的层次关系和显示更新
- 一个
功能
- 创建不同类型的窗口,包括主窗口、对话框、弹出窗口等
- 提供窗口的创建、显示、隐藏、最小化、最大化和销毁等操作
- 管理
View
的布局,通过布局管理器(如BoxLayout
、GridLayout
)实现复杂的UI
布局Widget
负责通知其包含的View
进行重绘和布局调整
- 处理来自用户的输入事件(如鼠标点击、键盘输入、滚动等),并将这些事件分发给相应的
View
- 支持事件的捕获、冒泡和拦截,确保控件能够正确响应用户交互
- 负责管理窗口或控件的绘制,通过调用
View
的绘制逻辑,实现复杂的视觉效果- 与
Layer
协同工作,支持透明度、变换、动画等高级视觉效果
- 与
与 View
的关系
View
对象是Widget
的子级元素,Widget
管理View
的创建、销毁和显示- 每个
View
都需要有一个Widget
作为其根窗口
- 每个
View::GetWidget()
返回包含该View
的Widget
,方便View
访问和操作其窗口级别的功能
1 2 3 4 5 6 |
// 创建一个简单的 Widget 并显示 Widget* widget = new Widget(); Widget::InitParams params(Widget::InitParams::TYPE_WINDOW); params.bounds = gfx::Rect(100, 100, 400, 300); // 设置窗口的大小 widget->Init(std::move(params)); widget->Show(); // 显示窗口 |
ContentsView
概述
ContentsView
是Widget
的一个特殊子视图,作为根节点承载并管理其他子视图(View
)ContentsView
是Widget
的根视图Widget
通过GetContentsView()
方法来获取这个根视图
- 任何
View
或继承自View
的控件都可以通过AddChildView()
方法被添加到ContentsView
中
工作
- 当
Widget
需要布局或重绘窗口内容时,它会调用ContentsView
的布局和绘制函数,ContentsView
再递归地调用它的子View
进行布局和绘制 - 用户的输入事件(如点击、拖拽)首先由
Widget
捕获,再分发到ContentsView
,由ContentsView
再递归地分发到子View
,直到事件被相应的View
处理
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ base_time04/23
- ♥ Chromium:鼠标事件的生成与处理07/19
- ♥ Cef:编译相关07/04
- ♥ Base_system05/27
- ♥ Chromium:学习,框架,一09/02
- ♥ Chromium 界面05/08