سؤال

إذن هذه هي القصة:

لدي QListview يستخدم QSqlQueryModel لملئه.نظرًا لأن بعض العناصر يجب أن تظهر بالخط العريض بناءً على قيمة العمود المخفي للنموذج، فقد قررت إنشاء مفوض مخصص خاص بي.أنا أستخدم 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. the normal (not bold) items are slightly indented (a few pixels). This is probably some default behaviour. I could indent my item in bold also, but what happens then under a different platform?
  2. عادةً عندما أقوم بتحديد العناصر، يكون هناك حد صغير به خط منقط حوله (شيء Windows الافتراضي؟).هنا أيضًا يمكنني رسمها، لكني أريد أن أبقى أصليًا قدر الإمكان.

والآن السؤال:

هل هناك طريقة أخرى لإنشاء مندوب مخصص يغير وزن الخط فقط عند استيفاء بعض الشروط ويترك الباقي دون تغيير؟

لقد حاولت أيضًا:

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