SuperAPI AI 工具集

building-qt-apps

通用与其它

查看项目

更新于 10-16 04:55

技能介绍

用途:该技能面向 PySide6/Qt 桌面 GUI 开发,要求在处理 Qt 代码前先加载,不直接手写 Qt 代码。它假定已加载 using-my-skills、engineering-principles 与 architecting-changes,仅补充 Python 特有的 Qt 模式;多 UI 依赖装配参见 building-multi-ui-apps,日志配置参见 setting-up-logging。

主要能力与架构:选择 PySide6(LGPL、随 wheel 分发、无额外系统依赖、API 同 PyQt6)。分层为 UI(MainWindow、Dialogs、TrayIcon)→ Manager(协调并发出 Qt 信号)→ Service(异步操作)→ Wrapper(对第三方库的类型化接口)→ 第三方库。异步用 qasync(而非技术预览中的 QtAsyncio);阻塞型库用 ThreadPoolExecutor 包装。

必要用法:入口用 QApplication + qasync.QEventLoop,先设 asyncio.set_event_loop(loop),再 signal.signal(signal.SIGINT, signal.SIG_DFL) 以让 Ctrl+C 生效;需要清理时改用调用 QApplication.quit() 的 SIGINT 处理器并配合 QTimer 定时空回调。信号定义在类级别并带类型(Signal(str)、Signal(float)),Signal(object) 仅在无泛型支持时使用。Qt 事件处理器用 camelCase 并忽略 ruff N802,自定义槽用 snake_case。QML 采用 MVVM:QML 只作视图,ViewModel 为暴露给 QML 的 QObject,且仅有一个通过 setContextProperty 暴露的桥;多页应用每页独立 VM,列表用 QAbstractListModel。托盘/菜单等固定动作可用声明式 label→callback 列表加通用循环构建。日志方面在创建 QML 引擎前安装 qInstallMessageHandler,并注意 console.log() 会被静默丢弃,应使用 console.info()。测试用 pytest-qt(qtbot.addWidget、qtbot.waitSignal)。

限制与暂未提供:技能未说明具体安装命令、版本要求、性能与收费信息;平台集成部分仅提及 Linux 上通过 XDG Desktop Portals 使用原生文件对话框,并需在未配置平台主题时设置 QT_QPA_PLATFORMTHEME=xdgdesktopportal,其余平台细节暂未提供。