PROJECT 01 / 11
Qt / CEF 鸿蒙通达 OA · 鸿蒙 PC
鸿蒙 C++ / CEF 开发工程师2026.08 — 至今
将桌面 OA 与即时通讯客户端迁移至鸿蒙 PC,接入窗口、Tray 与 Dock 系统能力。
核心技术栈
SQLite/QSQLITE、QDbManager/QDbTableFactory、QStandardPaths::AppLocalDataLocation、SettingsStorage、BaseWnd/CustCefWnd、EWAdapterC、WasResized、OnQuery/ExecuteJavaScript、OnDraggableRegionsChanged、QWindow::startSystemMove、Window.startMoving/recover/setWindowLimits、QSystemTrayIcon、setContextMenu/updateStatusBarMenu/rightMenuClick、setBadgeNumber/requestEnableNotification
具体项目经历
1. 封装鸿蒙 EL2 沙箱存储路径,按账号隔离配置、缓存、附件和消息文件,并完成账户信息加密及 HiLog、文件日志双写。
2. 复用原项目 QDbManager/QDbTableFactory 数据库架构,迁移用户、组织、会话、消息等 SQLite 表,通过事务和动态 DDL 完成字段升级。
3. 接入 OH_Input_GetIntervalSinceLastInput 定时获取系统空闲时间,实现超时自动离开、产生输入后恢复原状态,并同步服务端在线状态。
4. 通过 EWAdapterC 将 CEF Browser 挂载到 XComponent,完成节点创建、移动、缩放、显隐和焦点处理;窗口变化时调用 WasResized 同步 CEF 视口。
5. 统一 OnQuery/ExecuteJavaScript 双向通信链路,复用登录页、主 OA 和配置页的 JsContext;同时完成二维码登录异步轮询、任务取消及 Qt 主线程回调。
6. 迁移 BaseWnd/CustCefWnd/FramelessWidget 窗口架构,通过 OnDraggableRegionsChanged 获取前端真实标题栏区域,避免拖动区域与搜索框、菜单和三键冲突。
7. 主 OA 标题栏拖动调用 QWindow::startSystemMove,由 QPA 映射到 Window.startMoving,鼠标进入屏幕顶部或侧边后由鸿蒙窗口管理器自动触发最大化或半屏;通过 Window.recover 恢复贴边前尺寸。
8. 使用 Window.setResizeByDragEnabled 接入系统边缘拉伸,并监听 QEvent::WindowStateChange 将最大化、还原和贴边状态同步给 CEF 前端按钮。
9. 复用 QSystemTrayIcon 接入鸿蒙 PC 底部 Tray,完成图标显示、关闭进托盘和退出清理;通过 setContextMenu 对接 updateStatusBarMenu/rightMenuClick,实现右键菜单事件回传。
10. 接入 setBadgeNumber/requestEnableNotification 实现 Dock 未读角标和通知授权,并迁移QRemindModeFloat/FloatWnd 浮动消息卡片,支持高 DPI、自动排列和会话跳转。