如何在 QTableView 单元格角落绘制三角形以显示可以从列表中选择的模型数据?

Posted

技术标签:

【中文标题】如何在 QTableView 单元格角落绘制三角形以显示可以从列表中选择的模型数据?【英文标题】:How to draw a triangle in QTableView cell corner to show the model data can be selected from a list? 【发布时间】:2013-10-11 01:40:26 【问题描述】:

编辑单元格的默认行为是双击它,但我想向用户展示,他们可以从中选择一个列表,(我的某些列只有一个值,并且不可编辑),所以我打开了持久化编辑器,但是如果行太多,它就太慢了。

所以我转而重新实现 mousePressEvent 并在用户右键单击单元格时显示组合框,但没有任何视觉提示告诉他们可以右键单击哪个单元格。 (我知道也许我可以改变那个单元格的背景颜色)

但是我可以实现这样的目标吗?在单元格的右下方颜色处画一个黑色三角形表示可以右键单击?

喜欢这张来自 excel 的图片吗?

【问题讨论】:

【参考方案1】:

您可以使用QStyleItemDelegate,如下所示:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys

from PyQt4 import QtCore, QtGui

class StyledItemDelegateTriangle(QtGui.QStyledItemDelegate):
    def __init__(self, parent=None):
        super(StyledItemDelegateTriangle, self).__init__(parent)

    def paint(self, painter, option, index):
        super(StyledItemDelegateTriangle, self).paint(painter, option, index)

        polygonTriangle = QtGui.QPolygon(3)
        polygonTriangle.setPoint(0, QtCore.QPoint(option.rect.x()+5, option.rect.y()))
        polygonTriangle.setPoint(1, QtCore.QPoint(option.rect.x(), option.rect.y()))
        polygonTriangle.setPoint(2, QtCore.QPoint(option.rect.x(), option.rect.y()+5))

        painter.save()
        painter.setRenderHint(painter.Antialiasing)
        painter.setBrush(QtGui.QBrush(QtGui.QColor(QtCore.Qt.darkGreen))) 
        painter.setPen(QtGui.QPen(QtGui.QColor(QtCore.Qt.darkGreen)))
        painter.drawPolygon(polygonTriangle)
        painter.restore()

class MyWindow(QtGui.QTableWidget):
    def __init__(self, parent = None):
        super(MyWindow, self).__init__(parent)

        self.styledItemDelegateTriangle = StyledItemDelegateTriangle(self)

        self.setItemDelegate(self.styledItemDelegateTriangle)
        self.setRowCount(2)
        self.setColumnCount(3)

if __name__ == "__main__":    
    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.resize(333, 111)
    main.show()

    sys.exit(app.exec_())

【讨论】:

以上是关于如何在 QTableView 单元格角落绘制三角形以显示可以从列表中选择的模型数据?的主要内容,如果未能解决你的问题,请参考以下文章

单击表格单元格后,QtableView 中的某些单元格不会自动重绘

QTableView,设置单元格的字体和背景颜色

如何在 QTableView 中发出输入单元格和离开单元格的信号

如何创建 QTableview 单元格悬停功能

如何使用 pyside 在 QtableView 单元格中设置数据

如何从 QTest 单元测试中编辑 QTableView 单元格?