Как получить текущий индекс перед возвратом в обработчик eventFilter? - PullRequest
0 голосов
/ 26 июня 2018

Когда я перемещаю текущий индекс с помощью Key_Up или Key_Down в treeView , я обнаружил, что перемещенный текущий индекс применяется только после этой строки 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);
}

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете просто сначала пропустить событие, а затем проверить индекс:

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) ...

...