QMK旋转编码器使用修饰键触发编译溢出错误如何解决?
报错原因
tap_code() 函数仅支持输入8位无符号整数类型的基础键码,不接收带修饰键的复合16位键码。你使用QK_LCTL | KC_F24计算得到的结果是371,超过了uint8_t的最大值255,因此触发了溢出报错。
解决方案
方法1:使用支持16位键码的tap_code16()函数
这是最简单的修改方案,直接替换原有代码中的tap_code为tap_code16即可,该函数原生支持带修饰键的复合键码:
bool encoder_update_user(uint8_t index, bool clockwise) { if (index == 0) { /* First encoder */ if (clockwise) { tap_code16(QK_LCTL | KC_F24); } else { tap_code16(QK_LCTL | KC_F23); } } return false; }
方法2:手动拆分按键触发流程
如果需要更灵活的控制按键时序,也可以手动拆分修饰键的按下、释放动作:
bool encoder_update_user(uint8_t index, bool clockwise) { if (index == 0) { /* First encoder */ register_code(KC_LCTL); // 按下左Ctrl修饰键 if (clockwise) { tap_code(KC_F24); } else { tap_code(KC_F23); } unregister_code(KC_LCTL); // 松开左Ctrl修饰键 } return false; }
两种方案都可以正常触发Ctrl+F23/Ctrl+F24组合键,满足Voicemeeter宏按键的触发需求。
内容的提问来源于stack exchange,提问作者Dawz
相关产品推荐
相关产品推荐

