qt - 如何在 eventFilter 处理程序返回之前获取当前索引?
问题描述
当我在treeView中使用Key_Up或Key_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);
}
解决方案
您可以简单地首先传递事件,然后检查索引:
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)
...之后才会更改索引
推荐阅读
- python - Discord.py:不能使用普通命令并嵌入到同一个程序中
- google-sheets - 单行查询的堆叠结果
- azure - 将文件从 Azure ADLS G2 复制到 Azure 数据仓库,无需暂存
- javascript - 如何通过一次性权限请求在传单 js 上查看用户位置?
- swiftui - 如何设置NowPlayingView swiftui的样式
- flutter - Flutter - Bottomsheet 中的图标和文本未正确更新 UI
- angular - 如何将 Fontawesome 添加到 Angular 应用程序并让图标出现
- tidymodels - 您将如何使用 tidymodels 指定条件逻辑回归
- python - 如何根据 Python 中的列中的值将 csv 文件拆分为两个文件?
- tomcat - 如何访问部署在 kubernetes 上的 pod tomcat 的 url