如何在 QStandardItem 的图标上方显示文本?
How to display text above icon for QStandardItem?
我正在尝试显示 table 个图标和文本,以便每个项目的图标上方都有文本。
我目前正在使用带有 QStandardItemModel 和 QTableView 的 QStandardItems 来显示信息,但是文本只出现在图标的右侧。我还没有找到改变文本显示位置的方法。我也尝试过实现 QAbstractTableModel 并将数据方法覆盖到 return 我的 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)
在这种情况下,您必须使用委托:
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_())
我正在尝试显示 table 个图标和文本,以便每个项目的图标上方都有文本。
我目前正在使用带有 QStandardItemModel 和 QTableView 的 QStandardItems 来显示信息,但是文本只出现在图标的右侧。我还没有找到改变文本显示位置的方法。我也尝试过实现 QAbstractTableModel 并将数据方法覆盖到 return 我的 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)
在这种情况下,您必须使用委托:
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_())