Qt 如何在eventFilter处理程序中返回之前获取当前索引?
当我在treeView中用Key\u向上移动当前索引时,我发现移动的当前索引仅在这一行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
返回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