LINUX.ORG.RU

[Python][qt]Виджеты в QTable

 ,


0

0

Пока каникулы, хотел более глубоко покопать 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», полезного там много, но именно желаемое никак не прикрутить=(

А почему именно в paint? В createEditor делайте то же
if option.state & QStyle.State_Selected:

только вместо LineEdit запихните QWidget с QHBoxLayout с QLineEdit и QPushButton (к примеру). Думаю, это будет сильно проще.

Divius ★★
()
Ответ на: комментарий от Divius

А, ну точно же... Что-то, я про layouts запамятовал=))

Averrin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.