即使失去焦点,也强制在QAbstractItemView中显示当前索引



我有一个QAbstractItemView的实例,比如QListView,其中selectionMode设置为Qt::NoSelection。当我激活小部件时,我可以看到当前索引高亮显示。然而,当我关注另一个小部件时,QListView的当前索引不再突出显示。无论哪个小部件有焦点,我都需要始终突出显示当前索引。

您可以使用以下事件过滤器:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == ui->listView && event->type() == QEvent::FocusOut)
    {
        //when view loses focus we highlight current item
        ui->listView->selectionModel()->select( ui->listView->currentIndex(), QItemSelectionModel::Select );
    }
    if (obj == ui->listView && event->type() == QEvent::FocusIn)
    {
        //when view gets focus we clear selection
        ui->listView->selectionModel()->clear();
        ui->listView->selectionModel()->select( ui->listView->currentIndex(), QItemSelectionModel::Select );
    }
    return QObject::eventFilter(obj, event);
}

要使用eventFilter,您还应该:

protected:
    bool eventFilter(QObject *obj, QEvent *event);//in header

qApp->installEventFilter(this);//in constructor

若你们不想使用事件过滤器,你们可以用子类的方式查看和重新实现focusInEvent ( QFocusEvent * event )focusOutEvent ( QFocusEvent * event ),并做同样的事情。

相关内容

  • 没有找到相关文章

最新更新