在QT中通过键盘事件过滤,改变QTableWidget的键盘导航行为

本文介绍了如何在QT环境中,通过键盘事件过滤改变QTableWidget的导航行为。当单元格处于编辑状态时,通常左右键会移动文本光标,但作者希望左右键能像上下键一样结束编辑并选中相邻单元格。经过探索,作者发现事件首先被QExpandingLineEdit处理,而这是内部类,不能直接注册过滤器或创建子类。最后,通过给QApplication添加事件过滤器并在QExpandingLineEdit事件处理中忽略左右键事件,实现了所需功能。
摘要由CSDN通过智能技术生成


  用QTableWidget做个表格,当单元格在编辑状态的时候,键盘左右方向键是在单元格内移动文本插入点光标。但是我想让左右键结束编辑并直接选中相邻的单元格,效果和上下键一样。也许在高手眼里一点也不困难,不过本人刚接触QT,摸索了两天才解决,期间也有一些心得,所以记下来以免忘记。


  QT中所有事件都要先送到qApp,也就是QApplication的实例,从这里再进行分发。分发到哪里呢?对于键盘事件要看当前是谁获得了焦点,这个事件就发给那个对象。如果这个对象处理了事件,那么事件的传递就到此为止;如果这个对象不处理这个事件,事件就会传递给它的父对象,如果父对象也不处理,就继续传给父对象的父对象,直到主窗口为止。

  之所以用方向键可以在表格的各单元格间移动,是因为QTableWidget的实例处理了键盘事件。但当有个单元格处于编辑状态的时候,键盘事件就首先分发给单元格里的编辑控件了,这个控件对左右键进行了处理,左右键的事件就不会再传递到QTableWidget的实例了。这个编辑控件的类型是QExpandingLineEdit,怎么知道的呢?这是个内部使用的类,手册上是没有描述的,我在捕获到键盘事件的时候把object->metaObject()->className

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值