2009-09-11 4 views
4

을 추가하는 것은 그래서 여기 이야기입니다. 일부 항목은 모델의 숨겨진 열 값을 기준으로 굵게 표시되어야하므로 내 자신의 사용자 지정 대리자를 만들기로 결정했습니다. 나는 PyQT 4.5.4를 사용하고 있으므로 QStyledItemDelegate에서 상속하는 것은 문서에 따라 갈 수있는 방법이다. 나는 그것을 작동 시키지만 거기에 몇 가지 문제가있다.사용자 정의 QStyledItemDelegate는 :</p> <p>나는 그것을 채우기 위해 QSqlQueryModel를 사용하는 QListview 있습니다 굵은 항목

class TypeSoortDelegate(QStyledItemDelegate): 

    def paint(self, painter, option, index): 
     model = index.model() 
     record = model.record(index.row()) 
     value= record.value(2).toPyObject() 
     if value: 
      painter.save() 
      # change the back- and foreground colors 
      # if the item is selected 
      if option.state & QStyle.State_Selected: 
       painter.setPen(QPen(Qt.NoPen)) 
       painter.setBrush(QApplication.palette().highlight()) 
       painter.drawRect(option.rect) 
       painter.restore() 
       painter.save() 
       font = painter.font 
       pen = painter.pen() 
       pen.setColor(QApplication.palette().color(QPalette.HighlightedText)) 
       painter.setPen(pen) 
      else: 
       painter.setPen(QPen(Qt.black)) 

      # set text bold 
      font = painter.font() 
      font.setWeight(QFont.Bold) 
      painter.setFont(font) 
      text = record.value(1).toPyObject() 
      painter.drawText(option.rect, Qt.AlignLeft, text) 

      painter.restore() 
     else: 
      QStyledItemDelegate.paint(self, painter, option, index) 

문제점 내가 지금 직면하고 있습니다 :

  1. 일반 (굵게 표시되지 않은) 항목입니다 약간 들여 쓰기 (몇 픽셀)

    여기 내 솔루션입니다. 이것은 아마도 일부 기본값 인 입니다. 에 내 항목을 들여 쓸 수도 있지만 다른 플랫폼에서 은 어떻게됩니까?

  2. 일반적으로 항목을 선택할 때 주위에 점선이있는 작은 테두리가 있습니다 (기본 Windows 것인가?). 여기서도 그릴 수는 있지만 가능한 한 원주민이되고 싶습니다.

이제 질문 :

는 일부 조건이 충족되는 글꼴의 무게를 변경하고 나머지는 그대로 모든 잎 사용자 정의 대리자를 만들 수있는 또 다른 방법이 있습니까?

if value: 
    font = painter.font() 
    font.setWeight(QFont.Bold) 
    painter.setFont(font) 
QStyledItemDelegate.paint(self, painter, option, index) 

을하지만 전혀 모습에 영향을 미칠 것 같지 않습니다

나는 또한 시도했다. 오류가없고 기본 동작 만 있고 굵게 표시되지는 않습니다.

모든 제안을 환영합니다!

답변

3

내가 이것을 테스트하지했지만, 난 당신이 할 수 있다고 생각 :

class TypeSoortDelegate(QStyledItemDelegate): 

def paint(self, painter, option, index): 
    get value... 
    if value: 
     option.font.setWeight(QFont.Bold) 

    QStyledItemDelegate.paint(self, painter, option, index) 
관련 문제