Qt 如何在eventFilter处理程序中返回之前获取当前索引?

Qt 如何在eventFilter处理程序中返回之前获取当前索引?,qt,eventfilter,Qt,Eventfilter,当我在treeView中用Key\u向上移动当前索引时,我发现移动的当前索引仅在这一行返回QWidget::eventFilter(监视,事件)之后应用。在返回QWidget::eventFilter(watched,event)之前,如何获取新移动的索引?我试图用currentIndex=currentIndex-1手动更改移动的当前索引但它不起作用 bool TipManager::eventFilter(QObject *watched, QEvent *event) { if(w

当我在treeView中用Key\u向上移动当前索引时,我发现移动的当前索引仅在这一行
返回QWidget::eventFilter(监视,事件)之后应用。在返回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);
}
bool TipManager::eventFilter(QObject*监视,QEvent*事件)
{
if(wasted==ui->treeView&&event->type()==QEvent::KeyPress){
QKeyEvent*keyEvent=静态广播(事件);
QModelIndex currentIndex=ui->treeView->currentIndex();
if(keyEvent->key()==Qt::key\u Up)
{
//currentIndex=currentIndex-1;
}
if(keyEvent->key()==Qt::key\u Down)
{
//currentIndex=currentIndex+1;
}
if(currentIndex.isValid())
{
ui->treeView->setCurrentIndex(当前索引);
trimCurrentPath(currentIndex);
}
}
返回QWidget::eventFilter(监视的,事件);
}

您只需先向下传递事件,然后检查索引:

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;
}
bool TipManager::eventFilter(QObject*监视,QEvent*事件)
{
bool const ret=QWidget::eventFilter(监视的,事件);
if(wasted==ui->treeView&&event->type()==QEvent::KeyPress){
QKeyEvent*keyEvent=静态广播(事件);
QModelIndex currentIndex=ui->treeView->currentIndex();
if(keyEvent->key()==Qt::key\u Up)
{
//currentIndex=currentIndex-1;
}
if(keyEvent->key()==Qt::key\u Down)
{
//currentIndex=currentIndex+1;
}
if(currentIndex.isValid())
{
ui->treeView->setCurrentIndex(当前索引);
trimCurrentPath(currentIndex);
}
}
返回ret;
}

但我猜,实际上索引只有在离开
eventFilter(watched,event)

后才会更改。为什么要猜测以下currenIndex?@eyllansc,因为我想在treeView中显示当前选定文件的目录。但是新的目录路径是在再次移动索引后应用的(这意味着它应用了以前的目录路径)。我不理解你,请更好地解释一下,并提供一个为什么不使用currentChanged信号@我试过:
connect(这个,信号(ui->treeView->currentChanged()),这个,插槽(这个->indexChanged())在.cpp中<代码>受保护插槽:void indexChanged()英寸.h