2011-02-02 2 views
0

인사 모두가사용자 정의 배경색을 표시하는 Extrend QAbstractListModel?

http://oi51.tinypic.com/6hrm9w.jpg

나는 QCombobox의 배경색을 변경하는 내 자신의 QAbstractListModel을 드리고 있습니다. 이미지에서 보았 듯이 두 가지 문제점이 있습니다. 1) 첫 번째 이미지 스냅 샷에 표시된 것처럼 선택한 항목에 배경색이 표시되지 않습니다. 2) 항목을 선택할 때 배경이 기본 강조 색상 (밝은 파란색)으로 바뀝니다

어쨌든이 두 가지 문제를 해결할 수 있습니까?

여기 내 QAbstractListModel 구현입니다.



RzContourLabelModel::RzContourLabelModel(RzContourLabelContext *contourLabelCtx,int max,QObject *parent) : QAbstractListModel(parent){ 


    contourCtx=contourLabelCtx; 
    QList contourLabels=contourLabelCtx->getLabels(); 

    for(int i=0;i= colorLabels.size()) 
       return QVariant(); 

     if (role == Qt::DisplayRole){ 
      QString str; 
      str.setNum(colorLabels.at(index.row())); 
      return str; 
     } 

     if (role == Qt::BackgroundRole) 
     { 
      int labelNum=colorLabels.at(index.row()); 
      QColor col= contourCtx->getLabelColor(labelNum); 
      return col; 
     } 
       return QVariant(); 
} 
 
+0

색상으로 선택하지 않으면 어떻게 시각화 하시겠습니까? 선택을 사용하지 않으려면 setSelectionMode (NoSelection)로 시도해보십시오. QComboBox에서 처리 할 수 ​​있는지 확실하지 않을 수 있습니다. –

답변

2

두 가지 기능 (선택한 항목의 배경 및 강조 표시 색상)은보기로 제어됩니다. 여기에 문서에서 인용 한 것입니다 :

콤보 상자의 레이블 텍스트와 아이콘이의 Qt::DisplayRoleQt::DecorationRole이있는 모델의 데이터가 사용됩니다.

그래서 선택한 항목의 배경을 변경하기가 쉽지 않습니다. 대신 모델에서 색상 아이콘을 만들어 Qt::DecorationRole으로 반환 할 수 있습니다.

강조 표시 색상의 경우이 항목을 사용자 정의 항목 대리자로 다시 구현할 수 있습니다.

이 선택 색상 화에서 방지
QComboBox QAbstractItemView { 
    selection-background-color: Transparent; 
    selection-color: Black; 
} 

, 유일한 것은 내가 확실하지 않다 : QComboBox::setItemDelegate

2

당신은 Qt를 CSS로 재생을 시도 할 수 있습니다 ...

확실하지 않음이 도움이 있지만 수도 참조 about - 선택시 위젯의 배경이나 항목의 배경을 칠합니다. (

관련 문제