我用QTreeView和QDirModel显示系统中的目录,现在我想用自己定义的槽函数来实现键盘方向键的上(Key_Up)和下(Key_Down)的功能,但是我用了三种实现事件的的方法都不能进入我自定义的函数中。上下键的功能还是QTreeView自己的。如图目录树
这是我写的第一个键盘事件函数
void MyTreeview :: keyPressEvent(QKeyEvent *event)
{qDebug()<<"keyPressEvent";
switch (event->key())
{
case Qt::Key_Down:
nextImage();
break;
case Qt::Key_Up:
prevImage();
break;
default:
QTreeView::keyPressEvent(event);
break;
}
}
按键盘的上下键连qDebug()<<"keyPressEvent";这句都 打印不出来。按其余的键就能打印出来。
第二次我重写了event事件,如下:
bool MyTreeview :: event(QEvent *event)
{qDebug()<<"in event";
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *ke = static_cast<QKeyEvent *> (event);
if(ke->key() == Qt::Key_Down)
{qDebug()<<"in keydown";
nextImage();
return true;
}
else if(ke->key() == Qt::Key_Up)
{qDebug()<<"in keydup";
previousImage();
return true;
}
return QTreeView::event(event);
}
} 在这个里边无论做什么操作都能打印出qDebug()<<"in event";这句话,但是上下键还是不能进入,qDebug()<<"in keydown";不能打印出来
各为老大,谁知道我应该怎么做?