Custom QSTYLEDITEMDELEGATE : 대담한 항목 추가
-
05-07-2019 - |
문제
그래서 여기 이야기가 있습니다.
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)
내가 지금 직면하고있는 문제 :
- 정상 (대담하지 않은) 항목은 약간 들여 쓰기 (몇 픽셀)입니다. 이것은 아마도 기본 동작 일 것입니다. 내 아이템을 대담하게 들여 쓰기도 할 수는 있지만 다른 플랫폼에서 어떻게됩니까?
- 일반적으로 항목을 선택할 때는 주위에 점선이있는 작은 테두리가 있습니다 (기본 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)
제휴하지 않습니다 StackOverflow