垂直标题中的PyQT QTableiew图标

时间:2015-04-07 15:47:59

标签: header pyqt icons tableview

我想在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]

有什么想法吗?

1 个答案:

答案 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)

请注意,如果数据行的第一个元素为空白,上面的答案还有一个不显示图标的过滤器。

希望这对那里的人有用。