全局热键
插件热键由宿主在 Qt 主线程注册(
RegisterHotKey),你只声明或调用 API。 禁止插件自己ctypes.RegisterHotKey(绑错线程会静默失效)。
声明式(推荐)
json
"hotkeys": [
{ "action": "translate_selection", "default": "Alt+T", "name": "划词翻译" }
]- 插件启用后宿主自动注册,用户可在 设置 → 快捷键 里改绑定。
action对应实现里的action_<action>方法。- 触发时宿主调用
handle_action(action, {"source": "hotkey"})→(默认实现)action_<action>(**params)。
运行时 API
python
host.register_plugin_hotkey(plugin_id: str, action: str, key_seq: str, name: str = "") -> bool
host.unregister_plugin_hotkeys(plugin_id: str) -> bool
host.get_plugin_hotkeys() -> list[dict]- 兼容别名:
registerPluginHotkey/unregisterPluginHotkeys/getPluginHotkeys。 - 任意线程可调;宿主内部切主线程执行
RegisterHotKey。 - 内部 action 键为
plugin:{plugin_id}:{action}。 - 冲突检测与内置热键同一套(注册失败返回
False,别静默忽略)。 - 未声明
hotkeys的插件也能运行时注册(例如按配置动态加)。
生命周期
initialize()里注册运行时热键;shutdown()里host.unregister_plugin_hotkeys(self.id)(宿主也会兜底清理,但自己写更稳);- 用户改配置 →
update_config()里重新注册(热键组合可能变了)。
触发路径
用户按热键
→ 宿主派发 hotkey.triggered 事件(只投给本插件)
→ 调用 handle_action(action, {"source": "hotkey"})
→ action_<action>(**params) 默认实现重活请在 action_* 里 self.run_in_background(...),不要阻塞调用线程。
