문제

그래서 여기 이야기가 있습니다.

QSQLQueryModel을 사용하여 채우는 QlistView가 있습니다. 일부 항목은 모델의 숨겨진 열의 값에 따라 굵게 표시되어야하므로 내 자신의 사용자 정의 대의원을 만들기로 결정했습니다. PYQT 4.5.4를 사용하고 있으므로 QSTYLEDITEMDELEGATE에서 상속하는 것은 문서에 따라가는 방법입니다. 나는 그것을 작동 시켰지만 그것에 몇 가지 문제가 있습니다.

내 솔루션은 다음과 같습니다.

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 Thing?). 여기에도 그릴 수 있었지만 가능한 한 원주민을 유지하고 싶습니다.

이제 질문 :

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

나는 또한 시도했다 :

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

그러나 그것은 외모에 전혀 영향을 미치지 않는 것 같습니다. 오류, 기본 동작 만, 대담한 항목도 없습니다.

모든 제안을 환영합니다!

도움이 되었습니까?

해결책

나는 이것을 테스트하지 않았지만 당신이 할 수 있다고 생각합니다.

class TypeSoortDelegate(QStyledItemDelegate):

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

    QStyledItemDelegate.paint(self, painter, option, index)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top