Найти - Пользователи
Полная версия: QHeaderView
Начало » GUI » QHeaderView
1
ZZZ
Что-то я запортачился…
Есть QTreeView, к которому подключается модель.
С модели, из headerData по DecorationRole передаётся QIcon с png из ресурса, размером 29x23. Всё бы хорошо, но мне надо отрисовать в колонке хедера эту иконку так, чтобы она была не 16x16, а полная. Если точнее, мне вообще надо сделать так, чтобы эта иконка была единственным описанием в этой узкой колонке… Ну типа красиво.

Само собой первая мысль:
view.header().setIconSize(QtCore.QSize(29, 23))
И, как вы уже догадались, мысль неправильная.
Пробовал изменять SizeHintRole в модели – хедер растёт, а иконка нет.

Последнее, что осталось, это перерисовать хедер руками… Но это идиотизм.
Может кто знает?
ZZZ
Если кому интересно… Без плясок с бубном проблема не решилась.
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)
Дело в том, что после QtGui.QHeaderView.paintSection(self, painter, rect, index) что-либо ещё дотисовывать пейнтер отказывался. Поэтому я создал новый пиксмап, который сначала заполнил пустым хедером, потом нарисовал его на нужном месте, и сверху отрисовал иконку.
А вообще как-то оно всё глючно и нелогично работает.
poltergeist
В исходниках С++ не копался? PyQt много чего скрывает, прям как чёрный ящик иногда, очевидные вещи делаются через ж… т.е. через workaround. Думаю давно пора изучать исходники и если что делать багрепорты троллям. Просто пока тупиковых случаев не встречал…
ZZZ
Да уж… Иногда задумываюсь, что архитектура PyQt уже хорошо устарела… Этот SIP… Блин, надо же такое придумать! Так что, ИМХО, багреторты надо не троллям слать, а ривербанковцу… :-) Построить бы свой Лунный Модуль!..
Но в общем ты прав, окончательно тупиковых ситуаций я не встречал… Но магии много. И бубна.

P.S. Вот сейчас думаю, удастся ли без бубна отрисовать иконку в ячейку этого TreeView… Также, на всю ячейку. :-)
poltergeist
Копался в истории, нашел разработку 2005-го кода: python-qt4 - вручную написанные биндинги с помощью boost::pyhton тех лет (уже новая версия появилась), код держать в актуальном состоянии не возмжно и покрыть вручника весь кьют также не возможно… заглох проект.
Я уже думал насчёт своего “Лунного Модуля”, всё для этого вроде есть: (boost::python or cython or (boost::python and Py++)) and pygccxml and gccxml. Странно что никакой альтернативы PyQt до сих пор не появилось:(
И как я понял, ривербанковец включать лицензию LGPL не будет точно, это его бизнес, а жаль… всё зависит от одного человека можно сказать.
ZZZ
poltergeist
Странно что никакой альтернативы PyQt до сих пор не появилось :-(
И не появится. PyQt всем, в общем-то, хвавает. А браться за написание этих биндингов, а потом за их поддержку… Это будет очень не просто. Невольно задумаешься над коммерцелизацией. Вот если бы на базе какой-нить компании… Типа рядом с основным проектом, под предлогом независимости… Но в итоге дешевле купить PyQt.

poltergeist
И как я понял, ривербанковец включать лицензию LGPL не будет точно, это его бизнес, а жаль… всё зависит от одного человека можно сказать.
Не собирается. Да и, в общем-то, правильно делает – кушать-то все хотят.

Добавленно:
Сейчас в голову пришла мысль, что если такое написать, а потом прилипить к KDE (а им понравится мысль об избавлении от лицензии PyQt), то можно попасть под их крылышко… А это уже хоть не сильно, но не бесплатно. На пиво хватит, значит и поработать можно. :-)

И ещё добавленно::
А теперь в голову вообще караул что пришло… Надо парсить не код Qt, а документацию! В ней всё есть и притом во вполне читаемом виде.
В итоге надо будет только описать совмещение с питониими типами (ну там листы-словари всякие) и тесты… Сигналы нормальные…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB