图形与画布控件

图形与画布控件

图形类控件用于承载自定义绘制、OpenGL 场景和轻量可视化。Chart 类控件已归入 ChartKit 文档,本章节只说明 WidgetKit 中非图表的图形控件。

控件类型

控件 子内容与能力 典型用途
UIGQCanvas 自定义绘制区域、主题背景、鼠标事件承载 标注层、轻量图形区域、状态绘制
UIGQOpenGLWidget OpenGL 初始化、resize、paint、硬件加速渲染 3D 场景、高频图形刷新
UIGQOGLWidget OpenGL 场景封装、兼容渲染区域 工业视图、模型预览、硬件绘制面板

类继承关系

QWidget
  ├─ UIGQCanvas + IUIGQWidgetBase
  └─ QOpenGLWidget
      ├─ UIGQOpenGLWidget + OpenGLFunctions
      └─ UIGQOGLWidget

UIGQCanvas 属于 WidgetKit 主题控件,支持 IUIGQWidgetBase 的主题和布局能力。UIGQOpenGLWidgetUIGQOGLWidget 更接近渲染承载控件,继承 Qt OpenGL 体系,重点提供硬件绘制区域。

UIGQCanvas

UIGQCanvas 适合绘制辅助图形、状态标记和轻量的自定义视图。业务可以继承或组合使用它,将绘制逻辑集中在图形层。

UIGQCanvas* canvas = new UIGQCanvas(parent);
canvas->setObjectName("annotationCanvas");
canvas->setThemeName("CanvasBg");
canvas->setDrawBackground(true);

常用接口:

接口 说明 参数 返回值
setThemeName(const QString& themeName) 设置画布主题。 themeName:主题名。 void
setDrawBackground(bool draw) 控制是否绘制背景。 draw:是否绘制。 void
update() 请求重新绘制。 void
setMouseTracking(bool enable) 设置鼠标追踪。 enable:是否追踪。 void
paintEvent(QPaintEvent* event) Qt 绘制事件,业务可继承扩展。 event:绘制事件。 void
mousePressEvent(QMouseEvent* event) 鼠标按下事件。 event:鼠标事件。 void
mouseMoveEvent(QMouseEvent* event) 鼠标移动事件。 event:鼠标事件。 void
mouseReleaseEvent(QMouseEvent* event) 鼠标释放事件。 event:鼠标事件。 void

对于交互复杂的画布,建议拆分为数据层、绘制层和操作层,不要在 paintEvent 中直接计算大量业务数据。

UIGQOpenGLWidget 和 UIGQOGLWidget

UIGQOpenGLWidget / UIGQOGLWidget 用于需要硬件渲染的场景,例如 3D 模型、工业设备视图和高频图形刷新区域。

UIGQOGLWidget* view = new UIGQOGLWidget(parent);
view->setObjectName("sceneView");
view->setThemeName("OpenGLPanel");
view->setDrawBackground(false);

常用接口:

接口 说明 参数 返回值
initializeGL() OpenGL 初始化回调。 void
resizeGL(int width, int height) OpenGL 视口尺寸变化回调。 width/height:尺寸。 void
paintGL() OpenGL 绘制回调。 void
update() 请求下一帧绘制。 void
makeCurrent() 使当前 OpenGL 上下文生效。 void
doneCurrent() 释放当前 OpenGL 上下文。 void
setThemeName(const QString& themeName) 设置外层主题。 themeName:主题名。 void
setDrawBackground(bool draw) 控制是否绘制背景。 draw:是否绘制。 void

使用建议

  • Chart 相关控件不要放在 WidgetKit 页面文档中,统一查看 ChartKit 文档。
  • 高频绘制区域避免和复杂 QWidget 层级过度嵌套。
  • 画布背景、边框和圆角仍建议通过 setThemeName(...) 绑定主题。
  • OpenGL 控件的生命周期要和页面切换协调,避免隐藏页面继续高频刷新。