我有一个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 )
,并做同样的事情。