2012-06-14 46 views
3

每個報頭我可以使用不同工具提示在QTableView中

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

單個工具提示添加到所有標題,但我可以不同工具提示添加到每個報頭,即我需要訪問包含標頭,例如在QWidgets (不工作):

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

回答

0

QTableWidget(它繼承QTableView)具有能夠用來獲取的標題項目,所以你也許可以,務必要使用,而不是QTableView方法horizontalHeaderItem(int)

+0

據我所看到的,你不能用QAbstractTablemodel使用QTableWidget的。有沒有解決方法或其他解決方案 –

3

我對這個東西也很新,但我想你需要繼承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_())