Пока каникулы, хотел более глубоко покопать pyqt. Пишу нахрен никому (включая меня) не нежную софтину для работы с ReadItLater.
Собственно инфа выводится в виджет QTableView. Отображение html в ячейках сделано через делегат. Подскажите, как в ячейки встроить кнопочку (не вместо ячейки, а внутрь, т.е. справа(слева) от содержимого. На край в соседнюю ячейку)?
Существующий делегат:
class classDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
super(classDelegate,self).__init__(parent)
def paint(self,painter,option,index):
text = index.model().data(index).toString()
palette = QApplication.palette()
document = QTextDocument()
document.setDefaultFont(option.font)
if option.state & QStyle.State_Selected:
document.setHtml(QString("<font color=%1>%2</font>") \
.arg(palette.highlightedText().color().name())\
.arg(text))
else:
document.setHtml(text)
color = QColor("#eeeeee") if option.state & QStyle.State_Selected else QColor("#232323")
painter.save()
painter.fillRect(option.rect, color)
painter.translate(option.rect.x(), option.rect.y())
document.drawContents(painter)
painter.restore()
def createEditor(self,parent,option,index):
title=re.findall('^<.*>(.*)</font><br>',index.model().data(index, Qt.DisplayRole).toString())[0].toUtf8()
ind=index.model().index(index.row(),1)
url=ind.model().data(ind,Qt.DisplayRole).toString()
ind=index.model().index(index.row(),0)
id=ind.model().data(ind,Qt.DisplayRole).toString()
#print title, url
print id, url
#subprocess.Popen([browser,url])
В основном примеры в инетах базируются на переопределении метода createEditor и заменяют LineEdit на какой-нить SpinBox, а хотелось бы вышеописанную кнопочку и желательно в paint при условии
if option.state & QStyle.State_Selected:
P.S. Делегат уперт из книги «Rapid GUI Programming with Python and Qt», полезного там много, но именно желаемое никак не прикрутить=(
python, qt