2012-01-19 3 views
3

QAbstractTableModel에서 서브 클래 싱 된 내 모델로 구현 한 QTableView이 있습니다. 행의 필드 중 하나가 특정 값을 가질 때 행 색상을 빨간색으로 변경할 수 있어야합니다. 대답은 모델 번호 setData을 호출하고 Qt::BackgroundRole을 사용하여 배경색을 변경하는 많은 예제를 보았습니다. AbstractTableModel을 하위 클래스로 만들었으므로 setDatadata을 다시 구현하므로 모델 setData을 호출 할 때 배경색 역할을 수행하지 않습니다. 역할이 Qt::DisplayRole 인 데이터 만 처리하기 때문입니다.QTableView는 값을 기반으로 행 색상을 변경합니다.

제 첫 질문은 다음과 같습니다. 전체 역할의 색상을 변경하는 더 쉬운 방법이 있습니까? 그렇지 않다면, 나는 그 부분을 구현해야한다고 추측하고 있는데, BackgroundRole을 처리하기 위해 어떻게해야하는지 모르는 사람이있다.이 작업을 수행하는 방법에 대한 예제가 있다면, 많은 도움이 될 것이다.

생각보다 쉬웠다

답변

4

.. 내 데이터에있어서 그 경우, 블록에서

if (role == Qt::BackgroundColorRole) 

위해 체크했다. 내가 행 먹으 렴 내가 색상을 변경할 필요가 있는지 값의 비교를 확인하고 있는지 내가 돌아 :

return QVariant(QColor(Qt::red)); 
4

더 나은 대답은이 작업을 위해 view에서 제공하는 delegate을 사용하는 것입니다 model을 전혀 건드리지 마십시오. 모델이 왜보기에 필요한 색을 알고 있어야합니까? 여러보기가 다르게 동작하도록하려면 어떻게됩니까? 기타.

setColumnDelegate 또는 setRowDelegate 또는 기타 여러 메커니즘을 사용할 수 있습니다. 완벽한 대답을 위해 이러한 기능을 살펴보십시오.

+0

(절대적으로) uv가 적절한 것을 제안했습니다. 많은 기술적 부채를 창출하는 해결 방법을 찾는 것이 일반적입니다. – g24l

관련 문제