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

时间:2014-11-10 18:47:41

标签: qt widget focus qabstractitemview

我有一个QAbstractItemViewQListView的实例,selectionMode设置为Qt::NoSelection。当我激活小部件时,我可以看到当前索引突出显示。但是,当我关注另一个窗口小部件时,QListView的当前索引不再突出显示。无论哪个小部件都有焦点,我都需要始终突出显示当前索引。

1 个答案:

答案 0 :(得分:1)

您可以使用此事件过滤器执行此操作:

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 )并执行相同的操作。