Форум сайта python.su
Что-то я запортачился…
Есть QTreeView, к которому подключается модель.
С модели, из headerData по DecorationRole передаётся QIcon с png из ресурса, размером 29x23. Всё бы хорошо, но мне надо отрисовать в колонке хедера эту иконку так, чтобы она была не 16x16, а полная. Если точнее, мне вообще надо сделать так, чтобы эта иконка была единственным описанием в этой узкой колонке… Ну типа красиво.
Само собой первая мысль:
view.header().setIconSize(QtCore.QSize(29, 23))
И, как вы уже догадались, мысль неправильная.
Пробовал изменять SizeHintRole в модели – хедер растёт, а иконка нет.
Последнее, что осталось, это перерисовать хедер руками… Но это идиотизм.
Может кто знает?
Офлайн
Если кому интересно… Без плясок с бубном проблема не решилась.
class mapHeader(QtGui.QHeaderView):
def paintSection(self, painter, rect, index):
if index in [0, 1, 2, 4, 5]:
px = QtGui.QPixmap(rect.size())
pt = QtGui.QPainter(px)
QtGui.QHeaderView.paintSection(self, pt,
QtCore.QRect(0, 0,
rect.width(),
rect.height()),
-2) # пустой индекс
pt.end()
painter.drawPixmap(rect.x(), rect.y(), px)
icon = QtGui.QIcon(self.model().headerData(index,
QtCore.Qt.Horizontal,
QtCore.Qt.DecorationRole))
painter.drawPixmap(rect.x()+1, rect.y()+1, icon.pixmap(29, 23))
else:
QtGui.QHeaderView.paintSection(self, painter, rect, index)
Офлайн
В исходниках С++ не копался? PyQt много чего скрывает, прям как чёрный ящик иногда, очевидные вещи делаются через ж… т.е. через workaround. Думаю давно пора изучать исходники и если что делать багрепорты троллям. Просто пока тупиковых случаев не встречал…
Офлайн
Да уж… Иногда задумываюсь, что архитектура PyQt уже хорошо устарела… Этот SIP… Блин, надо же такое придумать! Так что, ИМХО, багреторты надо не троллям слать, а ривербанковцу… :-) Построить бы свой Лунный Модуль!..
Но в общем ты прав, окончательно тупиковых ситуаций я не встречал… Но магии много. И бубна.
P.S. Вот сейчас думаю, удастся ли без бубна отрисовать иконку в ячейку этого TreeView… Также, на всю ячейку. :-)
Офлайн
Копался в истории, нашел разработку 2005-го кода: python-qt4 - вручную написанные биндинги с помощью boost::pyhton тех лет (уже новая версия появилась), код держать в актуальном состоянии не возмжно и покрыть вручника весь кьют также не возможно… заглох проект.
Я уже думал насчёт своего “Лунного Модуля”, всё для этого вроде есть: (boost::python or cython or (boost::python and Py++)) and pygccxml and gccxml. Странно что никакой альтернативы PyQt до сих пор не появилось:(
И как я понял, ривербанковец включать лицензию LGPL не будет точно, это его бизнес, а жаль… всё зависит от одного человека можно сказать.
Отредактировано (Апрель 29, 2009 07:54:31)
Офлайн
poltergeistИ не появится. PyQt всем, в общем-то, хвавает. А браться за написание этих биндингов, а потом за их поддержку… Это будет очень не просто. Невольно задумаешься над коммерцелизацией. Вот если бы на базе какой-нить компании… Типа рядом с основным проектом, под предлогом независимости… Но в итоге дешевле купить PyQt.
Странно что никакой альтернативы PyQt до сих пор не появилось :-(
poltergeistНе собирается. Да и, в общем-то, правильно делает – кушать-то все хотят.
И как я понял, ривербанковец включать лицензию LGPL не будет точно, это его бизнес, а жаль… всё зависит от одного человека можно сказать.
Отредактировано (Апрель 29, 2009 14:48:37)
Офлайн