QTableView 中每个标题处都有不同的工具提示



我可以使用

tableview = QTableView()
tableview.horizontalHeader().setToolTip("headers")

但是我可以为每个标题添加不同的工具提示吗,即我需要访问包含标题的QWidgets,例如(不起作用):

tableview.horizontalHeader().Item[0].setToolTip("header 0")

我对这个东西也很陌生,但我认为你需要对 QTableView 进行子类化并重新实现 headerData 函数。这是一个工作示例。希望您可以从中提取所需的内容:

from PyQt4 import QtGui, QtCore
import sys
class PaletteListModel(QtCore.QAbstractListModel):
    def __init__(self, colors = [], parent = None):
        QtCore.QAbstractListModel.__init__(self,parent)
        self.__colors = colors
    # required method for Model class
    def rowCount(self, parent):
        return len(self.__colors)
    # optional method for Model class
    def headerData(self, section, orientation, role):
        if role == QtCore.Qt.DisplayRole:
            if orientation == QtCore.Qt.Horizontal:
                return QtCore.QString("Palette")
            else:
                return QtCore.QString("Color %1").arg(section)
        if role == QtCore.Qt.ToolTipRole:
            if orientation == QtCore.Qt.Horizontal:
                return QtCore.QString("Horizontal Header %s Tooltip" % str(section))
            else:
                return QtCore.QString("Vertical Header %s Tooltip" % str(section))

    # required method for Model class
    def data(self, index, role):
        # index contains a QIndexClass object. The object has the following
        # methods: row(), column(), parent()
        row = index.row()
        value = self.__colors[row]
        # keep the existing value in the edit box
        if role == QtCore.Qt.EditRole:
            return self.__colors[row].name()
        # add a tooltip
        if role == QtCore.Qt.ToolTipRole:
            return "Hex code: " + value.name()
        if role == QtCore.Qt.DecorationRole:
            pixmap = QtGui.QPixmap(26,26)
            pixmap.fill(value)
            icon = QtGui.QIcon(pixmap)
            return icon
        if role == QtCore.Qt.DisplayRole:
            return value.name()
    def setData(self, index, value, role = QtCore.Qt.EditRole):
        row = index.row()
        if role == QtCore.Qt.EditRole:
            color = QtGui.QColor(value)
            if color.isValid():
                self.__colors[row] = color
                self.dataChanged.emit(index, index)
                return True
        return False
    # implment flags() method
    def flags(self, index):
        return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    app.setStyle("plastique")
    data = QtCore.QStringList()
    data << "one" << "two" << "three" << "four" << "five"
    tableView = QtGui.QTableView()
    tableView.show()
    red   = QtGui.QColor(255,0,0)
    green = QtGui.QColor(0,255,0)
    blue  = QtGui.QColor(0,0,255)
    model = PaletteListModel([red, green, blue])
    tableView.setModel(model)
    sys.exit(app.exec_())

以下是对我有用的方法:

    headerView = self._table.horizontalHeader()
    for i in range(headerView.count()):
        key = headerView.model().headerData(i, QtCore.Qt.Horizontal)
        toolTip = myDictOfToolTips.get(key, None)
        self._table.horizontalHeaderItem(i).setToolTip(toolTip)

QTableWidget(继承QTableView)有一个方法horizontalHeaderItem(int)可用于获取标头项,因此您可以使用它而不是QTableView

如果使用QTableView,则可以通过QStandardItemModel设置工具提示:

QStandardItemModel myModel;
myModel.horizontalHeaderItem(1)->setToolTip("");

最新更新