【问题标题】:How to display text above icon for QStandardItem?如何在 QStandardItem 图标上方显示文本?
【发布时间】:2019-04-23 00:30:40
【问题描述】:

我正在尝试显示一个图标和文本表,以便每个项目在图标上方都有文本。

我目前正在使用带有 QStandardItemModel 和 QTableView 的 QStandardItems 来显示信息,但是文本仅显示在图标的右侧。我还没有找到改变文本显示位置的方法。我还尝试实现 QAbstractTableModel 并覆盖 data 方法以返回 Qt.DecorationRole 的图标和 Qt.DisplayRole 的文本,但它也只显示在图标的右侧。

例如:

from PySide.QtGui import *
from PySide.QtCore import *


class CustomTableView(QTableView):
    """Table view of icons and text."""
    def __init__(self):
        super(CustomTableView, self).__init__()

        custom_model = QStandardItemModel()
        for v in range(10):
            for i in range(10):
                new_item = QStandardItem("image.png", str(i))
                custom_model.setItem(v, i, new_item)

【问题讨论】:

    标签: python python-2.7 pyside qtableview qstandarditemmodel


    【解决方案1】:

    在这种情况下,您必须使用委托:

    from PySide import QtCore, QtGui
    
    
    class StyledItemDelegate(QtGui.QStyledItemDelegate):
        def initStyleOption(self, option, index):
            super(StyledItemDelegate, self).initStyleOption(option, index)
            option.decorationPosition = QtGui.QStyleOptionViewItem.Bottom
            option.displayAlignment = QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop
    
    
    class CustomTableView(QtGui.QTableView):
        """Table view of icons and text."""
    
        def __init__(self):
            super(CustomTableView, self).__init__()
            delegate = StyledItemDelegate(self)
            self.setItemDelegate(delegate)
            self.verticalHeader().setResizeMode(QtGui.QHeaderView.ResizeToContents)
            custom_model = QtGui.QStandardItemModel()
            for v in range(10):
                for i in range(10):
                    new_item = QtGui.QStandardItem(QtGui.QIcon("image.png"), str(i))
                    custom_model.setItem(v, i, new_item)
            self.setModel(custom_model)
    
    
    if __name__ == "__main__":
        import sys
    
        app = QtGui.QApplication(sys.argv)
        w = CustomTableView()
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2013-04-15
      • 1970-01-01
      相关资源
      最近更新 更多