2014-12-30 3 views
-1

이것은 나를 미치게합니다. 기본적으로 서브 클래 싱 된 QTableView에서 선택 항목을 가져올 수 없습니다. 그것은 상당히 큰 프로젝트이며, 대부분의 퍼즐 조각은 하위 클래스로 분류되었습니다. 하지만 기본적으로 모든 것을 확인한 것 같습니다.QTableView 선택 없음

QTableView::selectionModel(); // returns Qt::ExtendedSelection 
QTableView::selectionBehavior(); // returns Qt::SelectItems 
QTableView::QItemSelectionModel::hasSelection(); // returning false, which makes sense. 
QStyledItemDelegate::paint(); // In here I check the selection (and give it a special background if selected, but it's not, as expected) 

어디에도 명시 적으로 selectionMode() 또는 selectionBehavior()를 설정하지 않습니다. 나는 심지어 확인을 위해 각 마우스 클릭 내에서 위의 체크를했습니다. 이것은 이전에 작동했기 때문에 어딘가에 뭔가를 도입했음을 확신합니다.하지만 내가 무엇을 확인해야할지 모르겠습니다.

생각하십니까?

+2

좀 더 구체적으로 말씀해 주시겠습니까? 제공 한 정보가 충분하지 않습니다. – Tay2510

답변

0

좋아요, 알아 냈습니다. 그렇습니다. 코드를 게시했는데 프로젝트의 크기 때문에 두려웠습니다. 아마도 어쨌든 누구에게나 바뀌었을 것입니다. 나는 또한 당신이 모델에서 선택을 해제 할 수 있다는 것을 알지 못했다 (보기가 아님).

Qt::ItemFlags QAbstractTableModel::flags(const QModelIndex& index) const 
{ 
    // snip 
    return Qt::NoItemFlags; 
} 

그게 범인입니다. 위의 예를 반환하고 모델 수준에서 선택을 사용하지 않도록 설정하여 (인덱스를 선택 가능한 기본 동작을 재정의하는) 구석이있었습니다.

0

상속 된 클래스에서보기와 같은 테이블이 있으면 모든 기능을 직접 구현하지 않아도됩니다. 기본 선택 모델로 작업 할 수 있다면 이러한 기능을 구현할 필요가 없습니다. 이 상태에서는 자동으로 기본 기능이 호출됩니다.

+0

그게 내가하고있는 줄 알았는데 - 몇 가지 마우스 기능을 다시 구현할 때 몇 번 있었지만 내 마술을 한 후에는 항상 기본 클래스를 호출합니다. IE : myTableView :: mousePressEvent (QMouseEvent * 이벤트) {doMyFunc(); QTableView :: mousePressEvent (이벤트); } –

+0

모두 댓글을 달았지만 같은 결과를 얻었습니다. : –

+0

문제를 찾기 위해 남은 유일한 방법은보기 코드를 분석하는 것입니다. 그렇지 않으면 불가능합니다. – user21071987