qtmvc实现,model总共8列数据,代理其中第7列为icon+文本
时间: 2024-03-20 14:41:07 浏览: 53
modelview.rar_QT_modelview_mvc_qt mvc_qt MVC
实现 QStyledItemDelegate 的 paint() 函数,可以自定义绘制委托项的外观。在 paint() 函数中,可以使用 QPainter 绘制需要的元素,例如文本和图标。以下是一个示例实现:
```python
class IconTextDelegate(QtWidgets.QStyledItemDelegate):
def paint(self, painter, option, index):
# 获取数据
model = index.model()
text = model.data(index, QtCore.Qt.DisplayRole)
icon = model.data(model.index(index.row(), 6), QtCore.Qt.DecorationRole)
# 设置绘制参数
self.initStyleOption(option, index)
option.text = ""
option.icon = QtGui.QIcon()
option.widget.style().drawControl(QtWidgets.QStyle.CE_ItemViewItem, option, painter)
# 绘制图标
icon_rect = QtCore.QRect(option.rect.left(), option.rect.top(), option.rect.height(), option.rect.height())
icon.paint(painter, icon_rect, QtCore.Qt.AlignCenter)
# 绘制文本
text_rect = QtCore.QRect(icon_rect.right(), option.rect.top(), option.rect.width() - icon_rect.width(), option.rect.height())
painter.drawText(text_rect, QtCore.Qt.AlignVCenter, text)
```
在该实现中,使用了 model 的数据接口获取需要的图标和文本数据。然后使用 option 和 QPainter 绘制需要的元素,最后调用父类的 paint() 函数完成绘制。需要注意的是,因为需要绘制的项包含了图标,所以需要将 option 中的 text 和 icon 参数设置为空,避免被默认绘制覆盖。
阅读全文