尝试进行 Qt 测试,增加了 AI 人机调试工具 _console,以及 TransPyV 进行修正

This commit is contained in:
2026-07-21 14:41:22 +08:00
parent a277ded8d4
commit 135aa05485
311 changed files with 7084 additions and 2131 deletions

90
includes/vqt6/README.md Normal file
View File

@@ -0,0 +1,90 @@
# vqt6 — Viper 的 Qt6 绑定包
`vqt6` 是 [Viper](https://git.gvsds.com/GVSDS/TransPyC) 语言的 **Qt6 GUI 框架绑定**,是 Viper 包管理器分发的"包"(类似于 Python 的 PyQt6、Node.js 的 node-gtk
> 注意:`vqt6` **不是** 包管理器,而是一个**被包管理器管理的包**(库)。
> 包管理器负责下载、预编译、安装;`vqt6` 只负责把 Qt6 C++ API 暴露给 Viper 代码。
## 架构
```
+--------------------+ +-----------------------+ +------------+
| Viper 用户代码 | FFI | vqt6 桥接层 (libvqt6) | C++ | Qt6 C++ |
| (app.py) | <----> | - t.State 声明 | <-----> | QtCore |
| | | - C 桥接函数 | | QtGui |
| vqt6.QApplication | | (extern "C") | | QtWidgets |
| vqt6.QLabel | | - 静态库 / 动态库 | | QtNetwork |
+--------------------+ +-----------------------+ +------------+
```
**FFI 路径**
1. Viper 编译器把 `t.State` 声明的 `def xxx() -> t.State: pass` 解析为外部函数符号
2. 链接时通过 `libvqt6_bridge.a`(静态)或 `vqt6_bridge.dll`(动态)解析符号
3. 运行时 C 桥接层调用 Qt6 C++ API 完成实际工作
## 链接模式
| 模式 | 产物 | 优点 | 缺点 |
|------|------|------|------|
| **静态**(默认) | `libvqt6_bridge.a` | 部署简单(一个 exe无需分发 dll | exe 体积较大 |
| **动态** | `vqt6_bridge.dll` | 共享内存,多个程序共用 | 需随 exe 分发 dll |
vqt6 同一套 C 桥接源代码可同时编译为两种产物。Viper 项目通过 `project.vpj` 切换。
## 目录结构
```
includes/vqt6/
├── README.md # 本文件
├── __init__.py # 公共 Pythonic API用户使用
├── _types.py # 公共类型(不透明指针 typedef
├── _qtcore.py # QtCore 的 t.State FFI 声明
├── _qtwidgets.py # QtWidgets 的 t.State FFI 声明
├── _qtgui.py # QtGui 的 t.State FFI 声明
├── _qtnetwork.py # QtNetwork 的 t.State FFI 声明
├── _bridge.h # C 桥接层头文件
├── _bridge.cpp # C 桥接层实现extern "C" 包装 Qt6 C++ API
└── CMakeLists.txt # 构建脚本(生成 libvqt6_bridge.a
```
## 使用示例
```python
# App/main.py
import t
import c
import vqt6
# 1. 创建 QApplication
app: vqt6.QApplication | t.CPtr = vqt6.QApplication([])
# 2. 创建窗口
window: vqt6.QWidget | t.CPtr = vqt6.QWidget()
window.setWindowTitle("vqt6 Hello")
window.resize(400, 300)
# 3. 创建标签
label: vqt6.QLabel | t.CPtr = vqt6.QLabel("你好Viper", window)
label.move(50, 50)
# 4. 显示并进入事件循环
window.show()
app.exec()
```
## 设计原则
1. **不透明指针**Viper 端不直接操作 Qt6 C++ 类(`QWidget*``QString*` 等),所有操作通过 C 桥接函数 `vqt6_xxx()` 转发。
2. **t.State 声明**:所有 FFI 函数返回 `t.State`C 桥接层函数实现负责实际操作。
3. **句柄化对象模型**Viper 端的对象是 `t.CPtr`不透明指针C 端管理生命周期(构造函数/析构函数)。
4. **跨平台**:同一套 C 桥接代码可在 Windows / Linux / macOS 编译(差异在 Qt6 安装路径)。
## 当前状态
- [x] 架构设计
- [x] FFI 覆盖QtCore / QtWidgets / QtGui / QtNetwork
- [x] FFI 粒度:仅暴露 C 桥接函数
- [ ] FFI 声明文件编写中
- [ ] C 桥接层实现
- [ ] CMakeLists.txt 构建脚本
- [ ] Hello World 示例验证