Как отобразить текст над значком для QStandardItem? - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь отобразить таблицу значков и текстов так, чтобы у каждого элемента был текст над значком.

В настоящее время я использую QStandardItems с QStandardItemModel и QTableView для отображения информации, однако текст отображается только справа от значка. Я не нашел способ изменить место отображения текста. Я также попытался реализовать 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 Ответ

0 голосов
/ 23 апреля 2019

В этом случае вы должны использовать делегата:

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_())

enter image description here

...