用QTableWidget做个表格,当单元格在编辑状态的时候,键盘左右方向键是在单元格内移动文本插入点光标。但是我想让左右键结束编辑并直接选中相邻的单元格,效果和上下键一样。也许在高手眼里一点也不困难,不过本人刚接触QT,摸索了两天才解决,期间也有一些心得,所以记下来以免忘记。
QT中所有事件都要先送到qApp,也就是QApplication的实例,从这里再进行分发。分发到哪里呢?对于键盘事件要看当前是谁获得了焦点,这个事件就发给那个对象。如果这个对象处理了事件,那么事件的传递就到此为止;如果这个对象不处理这个事件,事件就会传递给它的父对象,如果父对象也不处理,就继续传给父对象的父对象,直到主窗口为止。
之所以用方向键可以在表格的各单元格间移动,是因为QTableWidget的实例处理了键盘事件。但当有个单元格处于编辑状态的时候,键盘事件就首先分发给单元格里的编辑控件了,这个控件对左右键进行了处理,左右键的事件就不会再传递到QTableWidget的实例了。这个编辑控件的类型是QExpandingLineEdit,怎么知道的呢?这是个内部使用的类,手册上是没有描述的,我在捕获到键盘事件的时候把object->metaObject()->className