首页 > 解决方案 > 如何在 eventFilter 处理程序返回之前获取当前索引?

问题描述

当我在treeView中使用Key_UpKey_Down移动当前索引时,我发现移动的当前索引仅在此行之后应用。我怎样才能得到一个新移动的索引?我试图通过手动更改移动的当前索引,但没有奏效。return QWidget::eventFilter(watched, event);return QWidget::eventFilter(watched, event);currentIndex = currentIndex-1;

bool TipManager::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->treeView && event->type() == QEvent::KeyPress){
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
        QModelIndex currentIndex = ui->treeView->currentIndex();

        if( keyEvent->key() == Qt::Key_Up )
        {
            //currentIndex = currentIndex-1;
        }
        if( keyEvent->key() == Qt::Key_Down )
        {
            //currentIndex = currentIndex+1;
        }
        if(currentIndex.isValid())
        {
            ui->treeView->setCurrentIndex(currentIndex);
            trimCurrentPath(currentIndex);
        }
    }
    return QWidget::eventFilter(watched, event);
}

标签: qteventfilter

解决方案


您可以简单地首先传递事件,然后检查索引:

bool TipManager::eventFilter(QObject *watched, QEvent *event)
{
    bool const ret = QWidget::eventFilter(watched, event);

    if(watched == ui->treeView && event->type() == QEvent::KeyPress){
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
        QModelIndex currentIndex = ui->treeView->currentIndex();

        if( keyEvent->key() == Qt::Key_Up )
        {
            //currentIndex = currentIndex-1;
        }
        if( keyEvent->key() == Qt::Key_Down )
        {
            //currentIndex = currentIndex+1;
        }
        if(currentIndex.isValid())
        {
            ui->treeView->setCurrentIndex(currentIndex);
            trimCurrentPath(currentIndex);
        }
    }
    return ret;
}

但我想实际上只有在离开你的eventFilter(watched, event)...之后才会更改索引


推荐阅读