如何在 QStandardItem 图标上方显示文本?

Posted

技术标签:

【中文标题】如何在 QStandardItem 图标上方显示文本?【英文标题】:How to display text above icon for 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)

【问题讨论】:

【参考方案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_())

【讨论】:

以上是关于如何在 QStandardItem 图标上方显示文本?的主要内容,如果未能解决你的问题,请参考以下文章

Lollipop上方的推送通知图标为白色[重复]

IOS - 手机屏幕上方显示 VPN 图标怎么回事?

电脑桌面如何显示软件图标?

QT 用listveiw显示图片

IOS - 手机屏幕上方显示 VPN 图标怎么回事?

如何在button上的文字上方加一个图标