1

set toのQAbstractItemViewsayQListViewのインスタンスがあります。ウィジェットをアクティブにすると、現在のインデックスが強調表示されます。ただし、別のウィジェットにフォーカスすると、現在のインデックスが強調表示されなくなります。どのウィジェットにフォーカスがあるかに関係なく、現在のインデックスを常に強調表示する必要があります。selectionModeQt::NoSelectionQListView

4

1 に答える 1

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 )、同じことを行うことができます。

于 2014-11-10T19:03:53.683 に答える