2014-11-10 1 views
1

QAbstractItemView의 인스턴스가 QListView이고 selectionModeQt::NoSelection으로 설정되어 있습니다. 위젯을 활성화하면 현재 색인이 강조 표시됩니다. 그러나 다른 위젯에 초점을 맞추면 QListView의 현재 색인이 더 이상 강조 표시되지 않습니다. 어떤 위젯에 포커스가 있는지에 관계없이 항상 현재 인덱스를 강조 표시해야합니다.포커스를 잃은 후에도 현재 인덱스를 QAbstractItemView에 표시합니다.

이 이벤트 필터를 사용하여이 작업을 수행 할 수

답변

1

:

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

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

당신이 사용하지 않는 경우 :

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를 사용하려면 이벤트 필터를 서브 클래 싱하여 focusInEvent (QFocusEvent * event)focusOutEvent (QFocusEvent * event)을 다시 구현하고 동일한 작업을 수행 할 수 있습니다. 에스.

+0

방금 ​​시도했으나하지 않습니다. 원하는 것을 선택하십시오. 나는 초점에있는 현재 색인을 선택한다. 하나의 문제는 선택 항목이 현재 색인 강조 표시와 다르게 보입니다. 두 번째 문제는 현재 색인이 위젯 외부에서 변경된다는 것이고 현재 색인을 항상 올바르게 표시하려면 위젯이 필요하다는 것입니다. – tach

+0

@tach 당신이 바깥 쪽을 바꿀 때 또한 'ui-> listView-> selectionModel() -> clear();'012-> listView-> selectionModel() -> select (ui-> listView-> model()) -> index (0,0), QItemSelectionModel :: Select); 그리고 모두 괜찮을 것이다. 선택의 색이 절대적으로 중요합니까? – Chernobyl

+0

실제로 색이 다른 경우보기 흉하게 보일 것입니다. 그것은 전적으로 거래를 깨는 것은 아니지만 그것은 아주 나쁩니다. 실제로 차라리 현재 항목을 다르게 강조 할 것입니다. 예 : 굵은 글꼴 대체 색상. – tach