• 10015阅读
  • 7回复

关于QtreeView键盘上下键的问题 [复制链接]

上一主题 下一主题
离线azlbcoo
 

只看楼主 倒序阅读 楼主  发表于: 2009-05-26
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我用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";不能打印出来
各为老大,谁知道我应该怎么做?
离线azlbcoo

只看该作者 1楼 发表于: 2009-05-26
补充一下。事件过滤器我也写过了,不管用。
离线libo8413
只看该作者 2楼 发表于: 2009-05-27
新手不会,帮顶
离线azlbcoo

只看该作者 3楼 发表于: 2009-05-27
自己顶,在线等答案
离线sunday1118
只看该作者 4楼 发表于: 2009-05-30
楼主的事件过滤器 没有使用对吧
没道理连事件过滤器都不能用啊?
离线sunday1118
只看该作者 5楼 发表于: 2009-05-30
有些控件是不响应某些特定的键盘事件的 虽然你在QTreeView中重载了键盘事件 但QTreeView可能根本就不响应这个事件
事件过滤器应该是可以解决的 好好研究一下
离线azlbcoo

只看该作者 6楼 发表于: 2009-05-31
用我写的三种方法都能在程序刚刚启动的时候进入我重载的键盘事件中,但是鼠标点击treeview的区域后就会使treeview失去焦点,这是再使用键盘的上下键就会使用treeview自带的处理方式了。我打印 了event->type()的值,每次鼠标点击treeview后都会失去焦点,现在我使用了个笨办法,在鼠标的Clicked()信号发出后练接一个我写的槽treeview->setFocus();重新把焦点交给treeview,但是这只能解决鼠标点击treeview中的某个Item的问题,当鼠标点击滚动条时根本没有信号发出,这样我就没办法解决了。
离线haozhenghui

只看该作者 7楼 发表于: 2012-06-27
楼主,你因该重载 QTreeView  你重载的是 QTwidget的 事件。
快速回复
限100 字节
 
上一个 下一个