Files
e2hang 96cb28fe08 feat: multi-layer eventFilter for window drag + text input fix + Qt platform xcb
- Fix window drag: install eventFilter on live2d_container, central, and
  _live2d_widget; fix super() call in dynamic class
- Fix text input: remove WA_TransparentForMouseEvents from _chat_container
- Force QT_QPA_PLATFORM=xcb on Linux (wayland has mouse event issues)
- Add HealthTracker module, update AgentBrain with health integration
- Update scheduler and memory modules
- Add v5_modify documentation

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-19 23:36:58 +08:00
..

v4_modify — PetWindow 跨线程 UI 调用 + Segfault 修复

Phase 2 集成总结

完成的修复

1. PySide6 6.9.2 type() 构造 segfault 修复

文件: ui/pet_window.py

问题: type() 构造的 PetWindow 子类在调用 Qt 虚拟方法(如 showEvent)时触发 PySide6 Shiboken 内部 segfault。

根因: type(self).__bases__[0].show(self) 调用方式在 Shiboken 6.9.2 中对 type()-构造的类无效。

修复方案:

  • show()/hide()/close() 改用 QtWidgets.QMainWindow.show(self) 直接调用
  • showEvent 空实现(跳过 super().showEvent())避免虚拟方法覆盖 segfault
  • _deferred_live2d_setup 注册到 PetWindowClass 字典(之前漏了)

2. Live2D 集成(延迟)

文件: ui/live2d_view.py, ui/pet_window.py

状态: 已创建 Live2DWidgetQWebEngineView但由于 PyQt5 WebEngine 在此环境存在 QApplication 依赖问题暂时禁用。Live2D 显示为 emoji 占位符 🎵

3. 可收缩聊天面板

文件: ui/pet_window.py

功能:

  • 左侧 200x200 Live2D 区域 + 右侧可收缩 180px 聊天面板
  • 右上角 +/× 切换按钮,点击展开/收缩聊天面板
  • 窗口宽度同步动画200px收缩↔ 380px展开

关键代码:

def _toggle_chat_panel(self):
    target = 0 if not self._chat_collapsed else self._chat_target_width
    self._chat_container.setFixedWidth(target)
    self._chat_collapsed = not self._chat_collapsed
    self._toggle_btn.setText("×" if self._chat_collapsed else "+")
    total_w = 200 + (0 if self._chat_collapsed else self._chat_target_width)
    self.resize(total_w, 220)

4. QPropertyAnimation 崩溃修复

问题: QPropertyAnimation 尝试动画不存在的 fixedWidth 属性导致崩溃。

修复: 移除动画,直接用 setFixedWidth() 设置。

已验证

  • 启动后 60+ 秒运行稳定
  • 窗口显示正常,聊天面板切换正常
  • 无 segfault无 QWidget QApplication 错误
  • python main.py 完整模式正常启动