Реализация sizeHint для подкласса QItemDelegate - PullRequest
1 голос
/ 06 декабря 2011

Я пытаюсь создать таблицу, в которой каждый элемент содержит пару строк, например:

enter image description here

В идеале, шрифт верхнего ряда должен быть другим (а не только жирным шрифтом).

Мое решение состоит в том, чтобы создать подкласс QItemDelegate и перегрузить paint и sizeHint. На приведенной выше диаграмме показано, что paint работает правильно, но я не смог выяснить sizeHint. Вот что я попробовал (сейчас делаю элементы с одной строкой):

def sizeHint(self, option, index):
    index_data = index.data(Qt.SizeHintRole)
    if index_data is None:
        return QSize()
    size = QItemDelegate.textRectangle(None,
                                       textLayoutBounds(option),
                                       option.font, str(index_data))
    return size

К сожалению, в PyQt защищенная функция-член textRectangle (вызываемая по умолчанию sizeHint) недоступна. Как правильно это сделать?

1 Ответ

0 голосов
/ 07 декабря 2011

У меня нет полного решения вашего вопроса. Однако для вычисления текстовых прямоугольников вы можете взглянуть на QFontMetrics.boundingRect . Также вас может заинтересовать делегат элемента расширенного текста, указанный в в этом ответе .

...