Chinaunix

标题: 如何拦截特殊键盘事件?Gtk或Qt [打印本页]

作者: Magicloud    时间: 2007-10-29 15:16
标题: 如何拦截特殊键盘事件?Gtk或Qt
比如我在一个文本框中按c-a,目前两者都可以在键盘处理中获知c-a被按,但如何阻止c-a导致的全选效果?或者c-x导致的剪切效果。
Gtk中通过修改Bindings应该可以,但困惑的是如何获知有哪些Bindings?
Qt4是在基类中处理keypressevent中检查按键,子类重载此方法可以使这些键不被处理,不过就需要自己处理文字输入了……
谢谢。

[ 本帖最后由 Magicloud 于 2007-10-29 18:51 编辑 ]
作者: whyglinux    时间: 2007-10-29 20:36
>> 比如我在一个文本框中按c-a,目前两者都可以在键盘处理中获知c-a被按,但如何阻止c-a导致的全选效果?或者c-x导致的剪切效果。
>> Gtk中通过修改Bindings应该可以,但困惑的是如何获知有哪些Bindings?

只要处理文本框的 key-press-event 信号即可。在其处理函数中检查是否有 Ctrl-A 或者 Ctrl-a 按下:如果有,让函数返回 TRUE;其余情况返回 FALSE 即可。屏蔽其它快捷键也是同样的处理。

>> Qt4是在基类中处理keypressevent中检查按键,子类重载此方法可以使这些键不被处理,不过就需要自己处理文字输入了……

只处理你感兴趣的按键,其它的 ignore()。
作者: Magicloud    时间: 2007-10-29 23:03
原帖由 whyglinux 于 2007-10-29 20:36 发表
>> 比如我在一个文本框中按c-a,目前两者都可以在键盘处理中获知c-a被按,但如何阻止c-a导致的全选效果?或者c-x导致的剪切效果。
>> Gtk中通过修改Bindings应该可以,但困惑的是如何获知有哪些Bindings?

...

多谢版主答复,恍然大悟啊……
作者: zhyustar    时间: 2007-11-07 09:58
标题: 回复 #2 whyglinux 的帖子
请问斑竹key-press-event,我只能捕获一个按键的信号,如何能捕捉到Ctrl-A 这些二个键的信号
作者: whyglinux    时间: 2007-11-07 21:46
原帖由 zhyustar 于 2007-11-7 09:58 发表
请问斑竹key-press-event,我只能捕获一个按键的信号,如何能捕捉到Ctrl-A 这些二个键的信号


Control、Shift、 Alt 等属于 Modifier Keys,其状态反映在 GdkEventKey 的 state 成员。具体参见 GdkEventKey 的文档说明。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2