Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » [PyQt4] Как изменить font отдельному элементу в в QTreeView [RSS Feed]

#1 Май 2, 2010 22:11:51

allive
От:
Зарегистрирован: 2010-04-18
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

[PyQt4] Как изменить font отдельному элементу в в QTreeView

Доброго времени суток.
Я совсем еще мало знаком с PyQt, поэтому прощу помощи здесь, т.к более достойного места найти не смог.

Дано:
QtGui.QTreeView()
простенькая модель из какого-то примера идущего в коробке с PyQt
Все это отображает древовидную структуру (пусть это будут обычные файлы и папки)

Хочется:
Что бы каждый заголовок группы отображался, например, 16-ым dejavu-sans bold

PS:
Ничего в голову не пришло, кроме, как рисовать текст переопределяя метод paint в QItemDelegate (drawText)
Но мне кажется, что есть более красивое решение.
Надеюсь на ваш совет.



Офлайн

#2 Май 2, 2010 23:06:00

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

[PyQt4] Как изменить font отдельному элементу в в QTreeView

в классе модели тебе нужно изменить метод data()

в общем виде он выглядит примерно так:

    def data(self, index, role):
if index.isValid():
if role == Qt.DisplayRole:
value = self.mytable[index.row()][index.column()]
return QVariant(value)

return QVariant()
Если индекс невалидный - возвращается пустой QVariant().
Иначе возвращаем данные в зависимости от роли. Роли бывают разные, полный список по ссылке http://doc.trolltech.com/4.6/qt.html#ItemDataRole-enum

Qt.DisplayRole - это текст, который отображается в ячейках QTableView или QTreeView.
Для шрифта есть роль Qt.FontRole, для цвета текста Qt.ForegroundRole


вообщем код превратится в нечто такое:
    def data(self, index, role):
if index.isValid():
if role == Qt.DisplayRole:
value = self.my_data[index.row()][index.column()]
return QVariant(value)
if role == Qt.ForegroundRole:
return QColor(Qt.red)
if role == Qt.FontRole:
font = QFont()
# выставляем размеры, семейство...
return font

return QVariant()



Отредактировано (Май 2, 2010 23:07:33)

Офлайн

#3 Май 2, 2010 23:22:24

allive
От:
Зарегистрирован: 2010-04-18
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

[PyQt4] Как изменить font отдельному элементу в в QTreeView

Заработало !
Большое спасибо, хоть начал понемногу понимать принцип работы



Офлайн

#4 Фев. 14, 2011 00:29:06

Dark_Cs
От:
Зарегистрирован: 2011-02-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

[PyQt4] Как изменить font отдельному элементу в в QTreeView

Подскажите, в чем может быть проблема: return QVariant() приводит к ошибке
TypeError: PyQt4.QtCore.QVariant represents a mapped type and cannot be instantiated



Офлайн

  • Начало
  • » GUI
  • » [PyQt4] Как изменить font отдельному элементу в в QTreeView[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version