一、背景
在用Qt做一个类似思维导图的软件,因此需要使用QGraphic框架,同时需要处理键盘的输入,但在输入’\t’时出现奇怪的现象。
二、问题
自定义的GraphicsItem接收不到tab键的keyPressEvent。当按下并释放非tab键时,事件的顺序是:view press event=>scene press event=>item press event=>item release event=>scene release event=>view release event,这个顺序是正常的;而当按下tab键时,事件的顺序是:scene press event=>view press event=>scene press event=>item release event=>scene release event=>view release,这个顺序是奇怪的,和预期的不一样。
三、解决方法
重写QGraphicsView和QGraphicsScene的event方法,重写QGraphicsItem的sceneEvent方法。
//....
class GraphicsScene : public QGraphicsScene{
//....
protected:
virtual bool event(QEvent *event)override{
if(event->type() == QEvent::KeyPress){
QKeyEvent *k = static_cast<QKeyEvent *>(event);
if(k->key() == Qt::Key_Tab){
th