我想在QTableView的垂直标题中显示图标而不是文本。
这里是QAbstractTableModel定义:
class clueTableModel(QAbstractTableModel):
header_labels=['#','DESCRIPTION','TEAM','TIME','DATE','O.P.','LOCATION','INSTRUCTIONS','RADIO LOC.']
def __init__(self,datain,parent=None,*args):
QAbstractTableModel.__init__(self,parent,*args)
self.arraydata=datain
def headerData(self,section,orientation,role=Qt.DisplayRole):
if role==Qt.DisplayRole and orientation==Qt.Horizontal:
return self.header_labels[section]
return QAbstractTableModel.headerData(self,section,orientation,role)
def rowCount(self, parent):
return len(self.arraydata)
...
...
在这里创建tableView:
class clueLogDialog(QDialog,Ui_clueLogDialog):
def __init__(self,parent):
QDialog.__init__(self)
self.ui=Ui_clueLogDialog()
self.ui.setupUi(self)
self.tableModel = clueTableModel(parent.clueLog, self)
self.ui.tableView.setModel(self.tableModel)
self.ui.tableView.verticalHeader().setVisible(True)
pixmap=QPixmap(":/radiolog_ui/help_icon.png")
self.ui.tableView.model().setHeaderData(0,Qt.Vertical,pixmap,Qt.DecorationRole)
self.ui.tableView.model().setHeaderData(1,Qt.Vertical,pixmap,Qt.DecorationRole)
self.ui.tableView.model().headerDataChanged.emit(Qt.Vertical,0,1)
结果是垂直标题项只是行号文本(默认值)。
我还尝试将其作为QIcon而不是具有相同结果的QPixmap。
我也试过在clueTableModel的headerData函数中这样做,同样的结果:
icon = QIcon()
icon.addPixmap(QPixmap(":/radiolog_ui/SplitterPanelIcon.png"), QIcon.Normal, QIcon.Off)
if role==Qt.DecorationRole and orientation==Qt.Vertical:
return [icon,icon,icon]
有什么想法吗?
答案 0 :(得分:2)
发布后几分钟发现答案:在模型的headerData函数中执行此操作,但使用QPixmap而不是QIcon。另外,为DisplayRole返回一个空字符串,以便禁止任何默认的行编号文本:
def headerData(self,section,orientation,role=Qt.DisplayRole):
if orientation==Qt.Vertical:
if role==Qt.DecorationRole and self.arraydata[section][0]!="":
return QPixmap(":/radiolog_ui/help_icon.png")
if role==Qt.DisplayRole:
return ""
if role==Qt.DisplayRole and orientation==Qt.Horizontal:
return self.header_labels[section]
return QAbstractTableModel.headerData(self,section,orientation,role)
请注意,如果数据行的第一个元素为空白,上面的答案还有一个不显示图标的过滤器。
希望这对那里的人有用。